2010-10-13 60 views
5

如何覆蓋AutoMapper爲給定屬性使用的類型轉換器?如何使用AutoMapper爲給定屬性指定特定類型轉換器

舉例來說,如果我有:

public class Foo 
{ 
    public string Name { get; set; } 
} 

public class Bar 
{ 
    public string Name { get; set; } 
} 

現在我只是想映射Foo.Name到Bar.Name但使用指定的類型轉換器。我看我如何使用它:

Mapper 
    .CreateMap<Foo,Bar>() 
    .ForMember(x => x.Name, opt => opt.ResolveUsing<FooNameResolver>()); 

但是,這個硬編碼的轉換使用Foo的名稱屬性。如果我在這個或其他類中的其他屬性上具有相同類型的轉換,則必須爲每個類創建一個解析器類。

而且我不想爲string - > string指定一個轉換器,因爲此轉換特定於此屬性或其他類似對象。

我只是想重寫類型轉換器!我敢肯定,這一定是可能的,但我衝它:-(

這樣的事情後,我:

Mapper 
    .CreateMap<Foo,Bar>() 
    .ForMember(x => x.Name, opt => opt.Using<MySpecialStringConverter>()); 

回答

7

我發現答案通過單元測試AutoMapper閱讀它的不是很明顯,儘管流暢的界面,因爲許多在映射選項的方法返回void但是,ResolveUsing<>()不返回無效,但可以讓你進一步指定選項就在這裏解決方案:。

Mapper 
    .CreateMap<Source,Dest> 
    .ForMember(dest => dest.Name, 
       opt => opt.ResolveUsing<MySpecialStringConverter>() 
          .FromMember(source => source.Name)); 

我'd寧願不必指定.FromMember當屬性是AutoMapper會使用的默認屬性,並且我想要使用的所有屬性都將覆蓋類型轉換器/解析器。

相關問題