Automapper - 继承映射器不适用于类型转换器
Automapper - Inheritance mapper not working with type converter
不能同时使用 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 class 进行映射,因为我有一些更复杂的计算要做,而不仅仅是像上面那样分配值。
当我使用类型转换器时,映射不起作用,但是当我删除 ConvertUsing 并使用 ForMember 的内联映射时,一切正常。
这是我缺少的东西吗?
PD。我正在使用:AutoMapper: version="4.2.1", targetFramework="net452"
不,您不能将 ConvertUsing 与其他任何东西结合使用。使用自定义类型转换器后,映射就完全由您决定了。这就是为什么 "ConvertUsing" returns "void",这是一个信号 "you're done with config thank you".
但是,您可以使用 ConstructUsing 构建初始目标对象。或自定义 AfterMap,这也是继承的。只是不使用 ConvertUsing。
不能同时使用 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 class 进行映射,因为我有一些更复杂的计算要做,而不仅仅是像上面那样分配值。
当我使用类型转换器时,映射不起作用,但是当我删除 ConvertUsing 并使用 ForMember 的内联映射时,一切正常。
这是我缺少的东西吗?
PD。我正在使用:AutoMapper: version="4.2.1", targetFramework="net452"
不,您不能将 ConvertUsing 与其他任何东西结合使用。使用自定义类型转换器后,映射就完全由您决定了。这就是为什么 "ConvertUsing" returns "void",这是一个信号 "you're done with config thank you".
但是,您可以使用 ConstructUsing 构建初始目标对象。或自定义 AfterMap,这也是继承的。只是不使用 ConvertUsing。