我正在使用AutoMapper,並且希望它根據映射(拼合)的目標屬性的名稱追溯源屬性。如何使用AutoMapper根據拼合屬性的名稱查找源屬性
這是因爲我的MVC控制器有一個映射屬性的名稱,它需要提供給用於排序目的的服務調用。該服務需要知道映射源自的屬性的名稱(並且控制器不應該知道該屬性),以便對實際對數據進行排序的存儲庫執行正確的調用。
例如:
[Source.Address.ZipCode]映射到[Destination.AddressZipCode]
然後
跟蹤 「AddressZipCode」 回[Source.Address .ZipCode]
這是什麼東西th在AutoMapper可以爲我做,還是我需要挖掘到AutoMapper的映射數據?
UPDATE
吉米·博加德告訴我,這應該是可能的,但不是明顯的方式。它需要加載類型映射並通過它。我已經簡要地研究了它,但似乎我需要訪問內部類型以獲取執行反向映射所需的屬性映射信息。
更新2
我已經決定提供一些更多的細節。
當我加載了類型映射,我發現有在這兩個源值解析器的隱含郵編映射:
- 一個
AutoMapper.Internal.PropertyGetter
是獲取地址。 - a
AutoMapper.Internal.PropertyGetter
獲取ZipCode。
當我有一個明確的映射(有指定的lambda表達式),我覺得沒有源值解析器,但是自定義解析:
- 一個
AutoMapper.DelegateBasedResolver<Company,string>
,我認爲對我的顯式映射lambda表達式。
不幸的是,這些解析器是內部的,所以我只能通過反射(我真的不想這麼做)或通過改變AutoMapper源代碼來訪問它們。
如果我可以訪問它們,我可以通過遍歷值解析器或通過檢查自定義解析器來解決問題,儘管我懷疑這會導致我返回映射lambda表達式,而我需要構建unflattened屬性名稱(實際上是由點分隔的一系列屬性名稱)。
你在說什麼flatenning/unflattening? – Omu 2010-08-04 12:17:51
@歐姆:是的,我的意思是我想解除屬性名稱,而不是整個對象。我發現你與ValueInjecter有關係,但是我希望在這種情況下保持在AutoMapper領域。 – 2010-08-04 12:54:18
好吧,Automapper無法做到這一點,但我在做ValueInjecter解鎖時做到了這一點 – Omu 2010-08-04 13:37:43