如何使用AutoMapper为给定属性指定特定类型转换器

Mik*_*ott 6 typeconverter automapper

如何覆盖AutoMapper用于给定属性的类型转换器?

例如,如果我有:

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

public class Bar
{
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在我只想将Foo.Name映射到Bar.Name,但使用指定的类型转换器.我知道如何使用以下方法:

Mapper
    .CreateMap<Foo,Bar>()
    .ForMember( x => x.Name, opt => opt.ResolveUsing<FooNameResolver>() );
Run Code Online (Sandbox Code Playgroud)

但是这会将转换硬编码为在Foo上使用Name属性.如果我在这个或其他类中的其他属性上有相同类型的转换,我必须为每个类创建一个解析器类.

我不想为string - > string指定转换器,因为此转换特定于此属性或其他类似属性.

我只想覆盖类型转换器!我敢肯定这一定是可能的,但我在它上面是空白的:-(

我是这样的:

Mapper
    .CreateMap<Foo,Bar>()
    .ForMember( x => x.Name, opt => opt.Using<MySpecialStringConverter>() );
Run Code Online (Sandbox Code Playgroud)

Mik*_*ott 8

我通过AutoMapper的单元测试发现了答案.尽管界面流畅,但它并不是很明显,因为映射选项上的许多方法都返回void.但是,ResolveUsing<>()不返回void但允许您指定其他选项.这就是解决方案:

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

我宁愿不必指定.FromMember何时属性是AutoMapper将使用的默认属性,而我想要使用的是覆盖类型转换器/解析器.