2012-02-12 50 views
3

我的DTO(目標)有一堆布爾值。自動映射器:從單個源值填充多個目標值

例如:

HasThisOption 
HasThatOption 
HasSomeOtherOption 

這些值通過在模型上的對象(源)的字段中的一個操作的方式一些計算填充。這個計算有點貴,所以我不想對DTO上的每個字段進行相同的計算,而只想運行一次計算。

簡單的解決方法就是從我的控制器調用一個函數..即.. PopulateFields(來源,DEST)

但我不希望有呼叫,忽略了在我的映射器配置中的每個目標字段。因爲它們中有大約40個......而且看起來很亂,真的沒有理由這麼做。

在這種情況下,人們通常會做什麼?

回答

4

定義源和目的地類型之間的映射時,您可以使用一個AfterMap

Mapper.CreateMap<Source, Dest>().AfterMap((source, dest) => 
{ 
    // do your custom computations and assignments here 
}); 

如果布爾字段中不存在的,他們無論如何都會在標準映射過程中忽略的源類型和有他們的默認值在目的地。 AfterMap方法允許您更改它們。

+0

它們將被忽略,但Mapper.AssertConfigurationIsValid()將引發異常。雖然我不知道AfterMap .. – NoPyGod 2012-02-12 22:00:28