【问题标题】:Automapper - Inheritance mapper not working with type converterAutomapper - 继承映射器不适用于类型转换器
【发布时间】:2016-05-25 22:01:59
【问题描述】:

不能同时使用 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="4.2.1", targetFramework="net452"

【问题讨论】:

    标签: c# automapper automapper-4


    【解决方案1】:

    不,您不能将 ConvertUsing 和其他任何东西结合使用。使用自定义类型转换器后,映射完全取决于您。这就是“ConvertUsing”返回“void”的原因,这是一个表示“您已完成配置,谢谢”的信号。

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

    【讨论】:

    • 感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    相关资源
    最近更新 更多