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>();
问题
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>();