Automapper 忽略空引用异常

Automapper ignoring Null Reference Exception

问题

AutoMapper v10.1.1

我有一个 AutoMapper 配置文件,它需要来自其源的扩展方法(在本例中为 NickName())以完成映射。这个方法会故意抛出一个 NullReferenceException 来说明 AutoMapper 似乎正在吞下这个异常这一点。当从我的服务 (MyService) 调用映射器时,它永远不会被引发。

例子

电话

mapper.Map<Person>(person) 

将 return 填充名称 属性 并将昵称 属性 设置为 null 的 Person 对象,尽管在映射过程中抛出了 NullReferenceException。

映射配置文件

public class PersonMappingProfile : Profile
{
  CreateMap<DataStorePerson, Person>()
    .ForMember(destinationMember => destinationMember.Name, options => options.MapFrom(source => source.Name))
    .ForMember(destinationMember => destinationMember.NickName, options => options.MapFrom(source => source.NickName()));
}

服务

public class MyService()
{
   private IMapper mapper;

   public MyService(IMapper mapper)
   {
      this.mapper = mapper;
   }
   
   public Person GetPerson()
   {
       var person = dataStore.GetPerson();
       return mapper.Map<Person>(person); // EXPECTED NULL REF EXCEPTION to be thrown here
   }
}

扩展方法

public static class PersonExtensions
{
   public static string NickName(this DataStorePerson person)
   {
      throw new NullRefenceException("This exception is swallowed by AutoMapper");
   }   
}

如何让 AutoMapper 将异常抛回给调用者?

我可以引发空引用异常的唯一方法是将对扩展方法的调用包装在 ValueResolver 中。请参阅 Automapper Value Resolvers .... 我的映射配置文件然后有此代码 .ForMember(destinationMember => destinationMember.NickName, options => options.MapFrom<MyCustomResolver>();