我正在尝试配置AutoMapper而不使用泛型,因为我想在运行时配置它。
我想配置SubstiteNulls方法,并且能够执行以下操作:
Mapper.CreateMap<Source, Dest>()
.ForMember(dest => dest.Value, opt => opt.NullSubstitute("Other Value"));
但我无法弄清楚如何做到这一点。您可以将它们的类型对象传递到CreateMap
工厂方法,但是当您使用ForMember
方法时,opt
对象不包含NullSubstitute
方法,我想这是应该的缺乏我在这里使用的通用。
关于如何实现这一目标的任何想法?
这些是我得到的选项:
答案 0 :(得分:3)
目前NullSubstitute
配置在您使用IMappingExpression
的非通用版本时使用的CreateMap
界面上不可用。
没有任何限制阻止Automapper在IMappingExpression
上使用此方法,因此目前不支持此方法。
您有三种选择:
或者,如果你想要一个快速但非常脏的解决方案。通过反射,您可以从配置中获取底层PropertyMap
并在其上调用SetNullSubstitute
方法:
Mapper.CreateMap(typeof(Source), typeof(Dest))
.ForMember("Value", opt =>
{
FieldInfo fieldInfo = opt.GetType().GetField("_propertyMap",
BindingFlags.Instance | BindingFlags.NonPublic);
var propertyMap = (PropertyMap) fieldInfo.GetValue(opt);
propertyMap.SetNullSubstitute("Null Value");
});