禁用 AutoMapper 内置枚举映射器

Disable AutoMapper built-in enum mapper

是否可以在 AutoMapper 中禁用枚举的内置映射器,或者用一个总是抛出异常的映射器替换它?

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

我宁愿它失败并出现一个异常告诉我我缺少一个 mapper/converter 而不是让它正常工作然后调用堆栈向下几步代码失败因为值是'就在当前上下文中。

从你写的内容我可以想到几个选项:

  1. 如果对象上有枚举属性,可以忽略它 明确地使用:

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

    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 映射器,并在未配置映射时给出异常。