繁体   English   中英

禁用 AutoMapper 内置枚举映射器

[英]Disable AutoMapper built-in enum mapper

是否可以禁用 AutoMapper 中枚举的内置映射器,或者将其替换为总是抛出异常的映射器?

我发现内置映射器非常不可靠,因为它会尽力将 map 输入到您提供的任何枚举中,这会增加在代码中引入、难以跟踪的错误的风险。

我宁愿让它失败,一个异常告诉我我缺少一个映射器/转换器,而不是让它正常工作,然后在调用堆栈中执行几个步骤,代码失败,因为该值在当前上下文中不正确。

从你写的我可以想到几个选择:

  1. 如果您在 object 上有一个枚举属性,则可以使用以下命令显式忽略它:

     CreateMap<Foo, Bar>().ForMember(dest => dest.EnumProperty, opt => opt.Ignore());
  2. 如果您为想要 map 的属性创建映射并省略您可以使用的枚举属性:

     CreateMap<Foo, Bar>().ForMember(...).ForAllOtherMembers(opt => opt.Ignore())
  3. 如果要替换枚举类型之间的映射,可以使用以下内容覆盖它:

     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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM