Automapper - 继承映射器不使用类型转换器

时间:2016-05-25 22:01:59

标签: c# automapper automapper-4

不能同时使用Mapping Inheritance和TypeConverter。

我有这段代码:

/* BaseClassTypeConverter.cs */
public class BaseClassTypeConverter : ITypeConverter<SourceClass, BaseClass> {
    public BaseClass Convert(ResolutionContext context) {
        if (context == null || context.IsSourceValueNull)
            return null;

        var src = (SourceClass)context.SourceValue;

        return new BaseClass() {
            CommonAttr = src.SourceAttr
        };
    }
}

/* AutoMapperConfig.cs */
public static class AutoMapperConfig {

    public static void RegisterMappings() {
        AutoMapper.Mapper.Initialize(config => {
            config
                .CreateMap<SourceClass, BaseClass>()
                .Include<SourceClass, DerivedClass1>()
                .Include<SourceClass, DerivedClass2>()  
                .ForMember(dest => dest.CommonAttr, o => o.MapFrom(src => src.SourceAttr));
                //.ConvertUsing<BaseClassTypeConverter>(); //  NOT WORKING

            config
                .CreateMap<SourceClass, DerivedClass1>()
                .ForMember(dest => dest.Dummy, o => o.MapFrom(src => src.SourceAttr2))
                .IncludeBase<SourceClass, BaseClass>();
        });
    }
}

正如您所看到的,我希望能够从TypeConverter类映射,因为我有一些更复杂的计算要做,而不仅仅是如上所述分配值。

当我使用类型转换器时,映射不起作用,但是当我删除ConvertUsing并使用ForMember的内联映射时,一切正常。

这是我想念的东西?

PD。我正在使用:AutoMapper:version =&#34; 4.2.1&#34;,targetFramework =&#34; net452&#34;

1 个答案:

答案 0 :(得分:2)

不,你不能将ConvertUsing和其他任何东西结合起来。一旦您使用自定义类型转换器,映射就完全取决于您。这就是为什么&#34; ConvertUsing&#34;返回&#34;无效&#34;,这是一个信号说&#34;你已完成配置谢谢你&#34;。

但是,您可以使用ConstructUsing构建初始目标对象。或者是自定义的AfterMap,它也是继承的。只是没有ConvertUsing。