我按惯例使用映射,并在向配置添加配置文件时遇到问题。考虑下面的配置。我正在使用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)
将ModelEntity映射到ModelPoco应该正常发生。
映射会中断消息: 无法转换'Proxy&lt;类型的对象IModel&GT;”在 mapper.Map(entity);
上输入'ModelPoco'。我不确定为什么它会为IModel接口创建Proxy类,然后尝试转换为具体实现? 我明确地设置了我想将 entity 映射到具体的实现。
如果我从配置文件中删除CreateMap它可以正常工作,但是第一次在所述配置文件中定义CreateMap时,它会中断。 在我看来它出于某种原因忘记了配置,即使它与它无关。