AutoMapper 12.0.1升级后自定义值解析器致AssertConfigurationIsValid()失败
解决AutoMapper 12升级后AssertConfigurationIsValid验证失败问题
问题根源
AutoMapper 12对配置验证逻辑做了严格升级:当映射逻辑使用非直接源属性访问的方式(比如调用静态方法、自定义解析器)时,框架无法自动识别对应的源属性已被使用。在MemberList.Source验证模式下,会判定这些源属性为“未映射”,从而触发报错。
解决方案
针对被间接使用的源属性,通过ForSourceMember显式标记为无需验证,告知AutoMapper这些属性已被处理。
修改后的映射配置代码
// CreateCodesetRequest 映射配置 CreateMap<CreateCodesetRequest, Codeset>(MemberList.Source) .ForMember(dest => dest.Name, opt => opt.MapFrom(src => NameableResolver.Trim(src.Name))) .ForMember(dest => dest.NormalizedName, opt => opt.MapFrom(src => src.Name.ToNormalizedString())) .ForSourceMember(src => src.Visibility, opt => opt.DoNotValidate()) .ForSourceMember(src => src.Name, opt => opt.DoNotValidate()); // 新增:标记Name属性无需验证 // UpdateCodesetRequest 映射配置 CreateMap<UpdateCodesetRequest, Codeset>(MemberList.Source) .ForMember(dest => dest.Name, opt => opt.MapFrom(src => NameableResolver.Trim(src.Name))) .ForMember(dest => dest.CodeGroupType, opt => opt.MapFrom<UpdateCodesetGroupTypeResolver>()) .ForSourceMember(src => src.Visibility, opt => opt.DoNotValidate()) .ForSourceMember(src => src.Name, opt => opt.DoNotValidate()) // 新增:标记Name属性无需验证 .ForSourceMember(src => src.CodeGroupType, opt => opt.DoNotValidate()); // 新增:标记CodeGroupType属性无需验证
说明
- 该修改不会影响自定义转换逻辑的执行,只是让配置验证跳过对这些已被间接使用的源属性的检查。
- 如果后续还有类似使用自定义逻辑映射的场景,都需要为对应的源属性添加
ForSourceMember(src => src.XXX, opt => opt.DoNotValidate())。
内容的提问来源于stack exchange,提问作者Umamaheswaran
相关产品推荐
相关产品推荐

