当源中缺少 Destination 属性导致失败时,AutoMapper(v9 和 10)映射成功

问题描述 投票:0回答:1

如果我正确理解 AutoMapper 文档,当没有找到目标成员的源成员/映射时,我应该会失败

https://docs.automapper.org/en/stable/Configuration-validation.html?highlight=Default#selecting-members-to-validate

Testrepo https://github.com/austinmfb/AutoMapperTests

设置

    public class OuterDest
    {
        public int Value { get; set; }
        public int AdditionalValue { get; set; }

        public DataClass1 DataClass { get; set; }

        public InnerDest Inner { get; set; }
    }

    public class InnerDest
    {
        public int OtherValue { get; set; }
    }

    public class OuterSource
    {
        public int Value { get; set; }
        public InnerSource Inner { get; set; }
    }

    public class InnerSource
    {
        public int OtherValue { get; set; }
    }

Action<IMapperConfigurationExpression> mapperConfigExpression =
    cfg =>
    {
        //MemberList.Source or Destination do not seem to change result
        cfg.CreateMap<OuterSource, OuterDest>() 
            //.ForMember(d => d.Value, opt => opt.MapFrom(s => s.Value))
        ;
        
        cfg.CreateMap<InnerSource,  InnerDest>();
    };
var mapperConfig = new MapperConfiguration(mapperConfigExpression);

测试

var mapped = mapper.Map<OuterDest>(source);

根据文档运行成功,它应该失败......

mapperConfig.AssertConfigurationIsValid(); /* 在异常消息中返回预期的失败成员

发现未映射的成员。查看下面的类型和成员。 添加自定义映射表达式、忽略、添加自定义解析器或修改源/目标类型 对于没有匹配的构造函数,请添加无参数构造函数、添加可选参数或映射所有构造函数参数

OuterSource -> OuterDest(目标成员列表) AutoMapperConsole.TestClasses.Sources.OuterSource -> AutoMapperConsole.TestClasses.Destinations.OuterDest(目标成员列表)

未映射的属性: 附加价值 数据类

*/

预期未映射的成员异常,因为目标类型中存在其他成员,而这些成员不在文档的源代码中。

automapper
1个回答
0
投票

这是预期的行为。

您应该始终在开发时验证您的配置,并在代码发布时解决所有错误。

Map
不会验证,只有在必须验证时才会失败。

© www.soinside.com 2019 - 2024. All rights reserved.