当我创建映射1-> 2然后反转它时,我期望得到与映射2-> 1和反转相同的东西。对?但是AssertConfigurationIsValid
在一种情况下成功,而在另一种情况下失败。
例如,
public class Basic1
{
public string Name;
public int Age;
}
public class Basic2
{
public string Name;
}
public void TestAutoMapperBasic()
{
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Basic1, Basic2>()
.ForMember(dest => dest.Name, c => c.MapFrom(src => src.Name))
.ReverseMap();
});
Mapper.AssertConfigurationIsValid();
}
这会成功吗?!!!但是如果我将其反转为CreateMap<Basic2, Basic1>
,它将失败。
我希望AssertConfigurationIsValid
实际检查两个方向,而不仅仅是一个方向。我该怎么办?
答案 0 :(得分:0)
这是预期的行为,正如开发人员的 described here。
<块引用>啊,这是预期的行为。 ReverseMap 不同,它 假设你实际上是扁平化和非扁平化。为了 非扁平化,你想断言源端是全部 映射,而不是目的地。反向地图并不假设您想要 断言任何内容,因为您已经验证了 Source -> 目的地映射。
简而言之,ReverseMap 现在是“特殊的”,而不仅仅是 两次 CreateMap 调用。
如果你想指定反向映射也应该验证,你可以明确指定:
config.ReverseMap().ValidateMemberList(MemberList.Destination)
您也可以为此创建一个扩展方法作为快捷方式:
public static IMappingExpression<TDestination, TSource> ReverseMapWithValidation<TSource, TDestination>(this IMappingExpression<TSource, TDestination> mapping)
=> mapping.ReverseMap().ValidateMemberList(MemberList.Destination);