扩展AutoMapper的默认行为

时间:2013-06-04 08:49:52

标签: 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),它会进入无限循环。假设没有定义TypeConverter,我实际上希望AutoMapper能够正常地执行所有操作。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

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

上面列出的文档页面足以让您入门:当您实现CustomResolver时,您可以像这样应用它,AutoMapper将为其他属性执行默认映射:

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