我在代码中使用了AutoMapper,并且有一个用于初始化映射器的通用包装器。该代码运行了很长时间,没有任何问题。升级到AutoMapper 8后,我的自定义转换器将被忽略。负责设置转换器的代码如下:
new MapperConfiguration(cfg =>
cfg.CreateMap(mySource, myTarget).ConstructUsing(myConverter);
这段代码不是使用AutoMapper 8生成的,因为我必须使用表达式。甚至提供了upgrade guid,但我无法使其再次运行。
我只是希望将其转换为
new MapperConfiguration(cfg =>
cfg.CreateMap(mySource, myTarget).ConstructUsing(expr => myConverter);
但转换器将被忽略。
答案 0 :(得分:2)
我通过将myConverter方法提取到一个继承自ITypeConverter的单独的类中,解决了类似的问题:
public class MyConverter : ITypeConverter<MySourceType, MyDestinationType>
{
public MyDestinationType Convert(MySourceType source, MyDestinationType destination, ResolutionContext context)
{
// Conversion logic here
}
}
然后可以使用以下内容替换映射配置:
cfg.CreateMap(mySource, myTarget).ConvertUsing<MyConverter>();
或
cfg.CreateMap<MySourceType, MyDestinationType>().ConvertUsing<MyConverter>();