2010-10-13 129 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会使用的默认属性,并且我想要使用的所有属性都将覆盖类型转换器/解析器。

相关问题