AutoMapper:IncludeBase仅在加载Base-Profile时才有效

时间:2016-03-01 07:09:57

标签: c# automapper

如果基本配置文件已加载,似乎有用的AutoMapper-Profile属性IncludeBase仅起作用。这是一个理论上的例子:

        CreateMap<BusinessObject, MainObject>()
        // Emitted

        CreateMap<BusinessObject, Child1>()
        .IncludeBase<BusinessObject, MainObject>()
        // Emitted, more properties

这个将按预期工作,Child1将所有MainObject属性映射。 现在,另一方面,这不起作用:

        CreateMap<BusinessObject, Child1>()
        .IncludeBase<BusinessObject, MainObject>()
        // Emitted, more properties

        CreateMap<BusinessObject, MainObject>()
        // Emitted

只有Child1配置文件中直接定义的属性才能正确映射。

我为AutoMapper使用的所有用法都包括通过Reflection动态加载Profiles。这种行为显然会阻止这种情况,因为我无法确定,配置文件的加载顺序。这是真的有意还是我在这里用错了什么?

1 个答案:

答案 0 :(得分:1)

您刚刚找到了我将AutoMapper移动到基于实例和只读配置的原因。你碰到这样的bug。在AutoMapper 5.0中,所有这些都是固定的,因为我将配置移动到两步过程,收集所有配置,然后以正确的顺序应用它。

这是一个错误,已在5.0中修复。