自动映射 - 添加配置文件后映射失败

时间:2018-05-29 12:13:58

标签: configuration automapper profile convention

我按惯例使用映射,并在向配置添加配置文件时遇到问题。考虑下面的配置。我正在使用AutoFac来解析CoreMapper中的配置文件,并且正确地注入了配置文件。

映射配置

private static void IgnoreUnmappedProps(TypeMap map, IMappingExpression expression)
{
    foreach(var propName in map.GetUnmappedPropertyNames())
    {
        if (map.SourceType.GetProperty(propName) != null)
            expression.ForSourceMember(propName, opt => opt.Ignore());
        if (map.DestinationType.GetProperty(propName) != null)
            expression.ForMember(propName, opt => opt.Ignore());
    }
}

public static void IgnoreUnmapped(this IProfileExpression profile)
{
    profile.ForAllMaps(IgnoreUnmappedProps);
}

IgnoreUnmapped如下:

mapper.Map<TPoco>(entity);

在我的代码中,我有一个泛型类实现,其行如下:

public class ModelPoco : IModel {
    // props
}

注意:mapper是上面的CoreMapper实例。 其中TPoco是POCO模型定义如下:

public class  RepositoryLayerProfile : AutoMapper.Profile {
    public RepositoryLayerProfile() {
        CreateMap<SomeOtherEntity, ISomeOtherModelInterface>();
    }
}

和实体是数据库实体模型。

映射工作正常。 mapper.Map&lt;的结果TPoco&gt;(实体)是正确的。

然后我继续为之前映射的 ModelPoco 添加与完全无关的特定地图的个人资料。

正在添加的个人资料:

from dicttoxml import dicttoxml
from collections import OrderedDict

class Node(object):
    def __init__(self, name):
        self._name = name

    def __str__(self):
        return self._name

quest_dict = OrderedDict([(Node('key1'), 'aaa'), (Node('key1'), 'bbb'), (Node('key1'), 'ccc')])
request_xml = dicttoxml(quest_dict, attr_type=False, root=False)
print(request_xml)

版本:6.2.2

预期行为

将ModelEntity映射到ModelPoco应该正常发生。

实际行为

映射会中断消息: 无法转换'Proxy&lt;类型的对象IModel&GT;”在 mapper.Map(entity);

上输入'ModelPoco'。

我不确定为什么它会为IModel接口创建Proxy类,然后尝试转换为具体实现? 我明确地设置了我想将 entity 映射到具体的实现。

如果我从配置文件中删除CreateMap它可以正常工作,但是第一次在所述配置文件中定义CreateMap时,它会中断。 在我看来它出于某种原因忘记了配置,即使它与它无关。

0 个答案:

没有答案