我在解决如何获得 Automapper 4.2.1 以允许类型映射时遇到一些问题,其中目标值可能为null,具体取决于源值 .
较旧版本的Automapper允许通过Mapper配置设置 AllowNullDestination 标志,但我找不到新版本的等效配方,并且通过静态Mapper对象配置的旧机制似乎已经过时 .
我试过以下但没有成功:
Mapper.Configuration.AllowNullDestinationValues = true;
Mapper.AllowNullDestinationValues = true;
Mapper.Initialize(c => c.AllowNullDestinationValues = true);
这是一个简单的测试案例,展示了这个问题 . 由于Substitute方法返回null,因此在 AutoMapperMappingException 的最后一行失败 . 我希望两个映射都能成功 .
我宁愿避免在解决方案中使用 .ForMember 因为在真实场景中我应该在整个对象树中应用对象'(实际上是一个自定义类) .
虽然StackOverflow上有几个类似的问题,但我还没有找到一个引用最新版Automapper的问题 .
在此先感谢您的任何建议
using AutoMapper;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace AutoMapperTest
{
[TestClass]
public class ExampleTest
{
[TestMethod]
public void NullDestinationCanBeMapped()
{
var mapper = new MapperConfiguration(configuration =>
{
configuration.CreateMap();
//How should the following mapping be modified to pass the test?
configuration.CreateMap()
.Substitute(i => i ? null : new object());
}).CreateMapper();
var target1 = mapper.Map(new Source {Member = false}); //succeeds
Assert.IsNotNull(target1.Member); //pass
var target2 = mapper.Map(new Source {Member = true}); //fails to map with exception
Assert.IsNull(target2.Member); //not reached
}
}
public class Source
{
public bool Member { get; set; }
}
public class Target
{
public object Member { get; set; }
}
}