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)
我通过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将使用的默认属性,而我想要使用的是覆盖类型转换器/解析器.
| 归档时间: |
|
| 查看次数: |
2305 次 |
| 最近记录: |