Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Automapper-继承映射器不使用类型转换器_C#_Automapper_Automapper 4 - Fatal编程技术网

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

C# Automapper-继承映射器不使用类型转换器,c#,automapper,automapper-4,C#,Automapper,Automapper 4,无法同时使用映射继承和类型转换器 我有以下代码: /* BaseClassTypeConverter.cs */ public class BaseClassTypeConverter : ITypeConverter<SourceClass, BaseClass> { public BaseClass Convert(ResolutionContext context) { if (context == null || context.IsSourceVal

无法同时使用映射继承和类型转换器

我有以下代码:

/* 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>();
        });
    }
}
/*BaseClassTypeConverter.cs*/
公共类BaseClassTypeConverter:ITypeConverter{
公共基类转换(ResolutionContext上下文){
if(context==null | | context.IsSourceValueNull)
返回null;
var src=(SourceClass)context.SourceValue;
返回新的基类(){
CommonAttr=src.SourceAttr
};
}
}
/*AutoMapperConfig.cs*/
公共静态类AutoMapperConfig{
公共静态无效注册表映射(){
AutoMapper.Mapper.Initialize(配置=>{
配置
.CreateMap()文件
.包括()
.包括()
.ForMember(dest=>dest.CommonAttr,o=>o.MapFrom(src=>src.SourceAttr));
//.ConvertUsing();//不工作
配置
.CreateMap()文件
.ForMember(dest=>dest.Dummy,o=>o.MapFrom(src=>src.SourceAttr2))
.IncludeBase();
});
}
}
如您所见,我希望能够从TypeConverter类映射,因为我有一些更复杂的计算要做,而不仅仅是像上面那样赋值

当我使用类型转换器时,映射不起作用,但是当我删除ConvertUsing并将内联映射与FormMember一起使用时,所有映射都可以正常工作

是我错过了什么


警察局。我使用的是:AutoMapper:version=“4.2.1”,targetFramework=“net452”

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


但是,您可以使用ConstructUsing构建初始目标对象。或者是一个自定义的AfterMap,这也是继承的。只是不要转换。

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


但是,您可以使用ConstructUsing构建初始目标对象。或者是一个自定义的AfterMap,这也是继承的。只是不要转换。

谢谢你的回答!谢谢你的回答!