AutoMapper
即时创建类型映射(6.2.0中的新增功能)。 当您第一次调用Mapper.Map
时,AutoMapper
将创建类型映射配置并编译映射计划。 后续的映射调用将使用编译的映射。
内联配置
要配置内联映射,请使用映射选项:
var source = new Source();
var dest = Mapper.Map<Source, Dest>(source, opt => opt.ConfigureMap().ForMember(dest => dest.Value, m => m.MapFrom(src => src.Value + 10)));
您可以使用本地功能使配置更容易阅读:
var source = new Source();
void ConfigureMap(IMappingOperationOptions<Source, Dest> opt) {
opt.ConfigureMap()
.ForMember(dest => dest.Value, m => m.MapFrom(src => src.Value + 10))
};
var dest = Mapper.Map<Source, Dest>(source, ConfigureMap);
您也可以在此内联映射中使用闭包,以捕获并使用您的配置中的运行时值:
int valueToAdd = 10;
var source = new Source();
void ConfigureMap(IMappingOperationOptions<Source, Dest> opt) {
opt.ConfigureMap()
.ForMember(dest => dest.Value, m => m.MapFrom(src => src.Value + valueToAdd))
};
var dest = Mapper.Map<Source, Dest>(source, ConfigureMap);
内联验证
第一次使用映射时,AutoMapper
使用默认的验证配置来验证映射(目标成员都必须被映射)。 随后的映射调用跳过映射验证。 这确保您可以安全地映射您的对象。
您可以配置用于验证的成员列表,以验证每个映射的来源,目标或无成员验证:
var source = new Source();
var dest = Mapper.Map<Source, Dest>(source, opt => opt.ConfigureMap(MemberList.None);
您也可以完全关闭内联映射验证(不建议这么做,除非您明确测试所有映射):
Mapper.Initialize(cfg => cfg.ValidateInlineMaps = false);
禁用内联映射
要关闭内联映射:
Mapper.Initialize(cfg => cfg.CreateMissingTypeMaps = false);