Automapper – inheritance映射器不使用类型转换器

不能一起使用Mapping Inheritance和TypeConverter。

我有这个代码:

/* BaseClassTypeConverter.cs */ public class BaseClassTypeConverter : ITypeConverter { 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() .Include() .Include() .ForMember(dest => dest.CommonAttr, o => o.MapFrom(src => src.SourceAttr)); //.ConvertUsing(); // NOT WORKING config .CreateMap() .ForMember(dest => dest.Dummy, o => o.MapFrom(src => src.SourceAttr2)) .IncludeBase(); }); } } 

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

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

这是我缺少的东西?

PD。 我正在使用:AutoMapper:version =“4.2.1”,targetFramework =“net452”

不,你不能组合ConvertUsing和其他任何东西。 使用自定义类型转换器后,映射完全取决于您。 这就是为什么“ConvertUsing”返回“void”,这是一个信号,说“你完成了配置,谢谢你”。

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