Automapper AssertConfigurationIsValid不检查ReverseMap

时间:2019-01-22 21:22:18

标签: c# .net automapper

当我创建映射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实际检查两个方向,而不仅仅是一个方向。我该怎么办?

1 个答案:

答案 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);