2013-06-04 44 views
3

我想定制AutoMapper转换我的类型的方式,而不会丢失已由AutoMapper实现的功能。扩展AutoMapper的默认行为

我可以创建一个自定义ITypeConverter实例,但我看不到如何调用默认行为。

Mapper.CreateMap<MyDomainObject, MyDto> 
     .ConvertUsing<MyTypeConverter>(); 

...

public class MyTypeConverter : TypeConverter<MyDomainObject, MyDto> 
{ 
    public MyDto ConvertCore(MyDomainObject source) 
    { 
     var result = // Do the default mapping. 

     // do my custom logic 

     return result 
    } 
} 

如果我尝试调用var result = Mapper.Map<MyDto>(source)它进入一个无限循环。我有效地希望AutoMapper能够完成它通常会假设没有定义TypeConverter的所有事情。

任何帮助极大的赞赏。

回答

1

如果您只想定制目标对象上的某些值,那么最好使用Custom Value Resolver - TypeConverters旨在处理整个转换。

上面列出的文档页面将有足够让你开始:当你已经实现了CustomResolver应用它这个样子,和AutoMapper会做其他属性的默认映射:

Mapper.CreateMap<MyDomainObject, MyDto>() 
    .ForMember(dest => dest.TargetProperty, 
       opt => opt.ResolveUsing<CustomResolver>());