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
的默认值。
自定义验证
你可以通过扩展点添加自定义验证。参见 此处 。