[英]Disable AutoMapper built-in enum mapper
是否可以禁用 AutoMapper 中枚举的内置映射器,或者将其替换为总是抛出异常的映射器?
我发现内置映射器非常不可靠,因为它会尽力将 map 输入到您提供的任何枚举中,这会增加在代码中引入、难以跟踪的错误的风险。
我宁愿让它失败,一个异常告诉我我缺少一个映射器/转换器,而不是让它正常工作,然后在调用堆栈中执行几个步骤,代码失败,因为该值在当前上下文中不正确。
从你写的我可以想到几个选择:
如果您在 object 上有一个枚举属性,则可以使用以下命令显式忽略它:
CreateMap<Foo, Bar>().ForMember(dest => dest.EnumProperty, opt => opt.Ignore());
如果您为想要 map 的属性创建映射并省略您可以使用的枚举属性:
CreateMap<Foo, Bar>().ForMember(...).ForAllOtherMembers(opt => opt.Ignore())
如果要替换枚举类型之间的映射,可以使用以下内容覆盖它:
Mapper.CreateMap<EnumSrc,EnumDst>().ConvertUsing(value => { throw new Exception(); });
根据 Lucian 的评论,我将以下代码添加到我的配置中:
services.AddAutoMapper(config =>
{
var enumMapper = config.Mappers.Single(m => m is AutoMapper.Mappers.EnumToEnumMapper);
config.Mappers.Remove(enumMapper);
}, typeof(Startup));
这将删除默认的 EnumToEnum 映射器,并在未配置映射时给我异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.