项目
版本

AutoMapper 配置验证

手动编写的映射代码虽然繁琐,但具有可测试的优点。AutoMapper 背后的灵感之一就是不仅要消除自定义映射代码,还要消除手动测试的需求。因为从源到目标的映射基于约定,你仍然需要测试你的配置。

AutoMapper 通过 AssertConfigurationIsValid 方法提供了配置测试功能。假设我们的源类型和目标类型配置稍有错误:

public class Source
{
	public int SomeValue { get; set; }
}

public class Destination
{
	public int SomeValuefff { get; set; }
}

Destination 类型中,我们可能因误操作而错误地命名了目标属性。其他典型问题包括源成员的重命名。为了测试我们的配置,我们只需创建一个单元测试,设置配置并执行 AssertConfigurationIsValid 方法:

var configuration = new MapperConfiguration(cfg =>
  cfg.CreateMap<Source, Destination>());

configuration.AssertConfigurationIsValid();

执行这段代码会抛出一个 AutoMapperConfigurationException 异常,并附带描述性信息。AutoMapper 会确保目标类型上的 每一个 成员在源类型上都有对应的成员。

覆盖配置错误

要修复配置错误(除了重命名源/目标成员之外),你有三种选择来提供替代配置:

使用第三种选项,我们在目标类型上有一个成员,我们将通过其他方式填充它,而不是通过 Map 操作来填充。

var configuration = new MapperConfiguration(cfg =>
  cfg.CreateMap<Source, Destination>()
	.ForMember(dest => dest.SomeValuefff, opt => opt.Ignore())
);

选择成员进行验证

默认情况下,AutoMapper 使用目标类型来验证成员。它假定所有目标成员都需要被映射。要修改此行为,请使用 CreateMap 重载来指定要验证的成员列表:

var configuration = new MapperConfiguration(cfg =>
  cfg.CreateMap<Source, Destination>(MemberList.Source);
  cfg.CreateMap<Source2, Destination2>(MemberList.None);
);

要完全跳过此映射的验证,使用 MemberList.None 。这是 ReverseMap 的默认值。

自定义验证

你可以通过扩展点添加自定义验证。参见 此处

在本文档中