如何配置 Automapper 4 以允许空目标值
How can I configure Automapper 4 to allow a null destination value
我在解决如何获取 Automapper 4.2.1 以允许目标值可能为 null 的类型映射时遇到了一些问题,具体取决于源值。
旧版本的 Automapper 允许通过 Mapper 配置设置 AllowNullDestination 标志,但我找不到新版本的等效配方和旧的配置机制静态 Mapper 对象似乎已被淘汰。
我尝试了以下但没有成功:
- Mapper.Configuration.AllowNullDestinationValues = 真;
- Mapper.AllowNullDestinationValues = 真;
- Mapper.Initialize(c=>c.AllowNullDestinationValues=true);
这是一个演示问题的简单测试用例。这在最后一行以 AutoMapperMappingException 失败,因为 Substitute 方法返回 null。我希望两个映射都能成功。
我宁愿避免在解决方案中使用 .ForMember 因为在真实场景中我试图解决 bool 和 'object' 之间的映射(实际上是自定义 class)应该应用于整个对象树。
尽管 Whosebug 上有几个类似的问题,但我还没有找到一个涉及最新版本的 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<Source, Target>();
//How should the following mapping be modified to pass the test?
configuration.CreateMap<bool, object>()
.Substitute(i => i ? null : new object());
}).CreateMapper();
var target1 = mapper.Map<Source, Target>(new Source {Member = false}); //succeeds
Assert.IsNotNull(target1.Member); //pass
var target2 = mapper.Map<Source, Target>(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; }
}
}
不要使用 Substitute,而是使用 ConvertUsing...
configuration.CreateMap<bool, MyClass>()
.ConvertUsing(i => i ? null : new object());
我在解决如何获取 Automapper 4.2.1 以允许目标值可能为 null 的类型映射时遇到了一些问题,具体取决于源值。
旧版本的 Automapper 允许通过 Mapper 配置设置 AllowNullDestination 标志,但我找不到新版本的等效配方和旧的配置机制静态 Mapper 对象似乎已被淘汰。
我尝试了以下但没有成功:
- Mapper.Configuration.AllowNullDestinationValues = 真;
- Mapper.AllowNullDestinationValues = 真;
- Mapper.Initialize(c=>c.AllowNullDestinationValues=true);
这是一个演示问题的简单测试用例。这在最后一行以 AutoMapperMappingException 失败,因为 Substitute 方法返回 null。我希望两个映射都能成功。
我宁愿避免在解决方案中使用 .ForMember 因为在真实场景中我试图解决 bool 和 'object' 之间的映射(实际上是自定义 class)应该应用于整个对象树。
尽管 Whosebug 上有几个类似的问题,但我还没有找到一个涉及最新版本的 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<Source, Target>();
//How should the following mapping be modified to pass the test?
configuration.CreateMap<bool, object>()
.Substitute(i => i ? null : new object());
}).CreateMapper();
var target1 = mapper.Map<Source, Target>(new Source {Member = false}); //succeeds
Assert.IsNotNull(target1.Member); //pass
var target2 = mapper.Map<Source, Target>(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; }
}
}
不要使用 Substitute,而是使用 ConvertUsing...
configuration.CreateMap<bool, MyClass>()
.ConvertUsing(i => i ? null : new object());