繁体   English   中英

自动映射器无法在层次结构上正确映射

[英]Automapper doesn't map properly on hierarchy

我正在使用Automapper将接口复制到不同的实现中(用于序列化,用于视图模型,用于数据库映射等)。

我的代码复杂得多,但在下面的代码片段示例中隔离了该问题。

考虑以下代码,由于第二个断言失败 ,我会错过什么吗:

    [Test]
    public void AutoMapperTest()
    {
        Mapper.CreateMap<IMyBaseInterface, MyClass>();
        Mapper.CreateMap<IMyInterface, MyClass>();            
        IMyBaseInterface baseInstance = new MyBaseClass{ MyBaseProperty = "MyBase" };
        var concrete = Mapper.Map<MyClass>(baseInstance);
        concrete.MyClassProperty = "MyClass";
        MyClass mapped = Mapper.Map<IMyInterface,MyClass>(concrete);
        Assert.AreEqual(concrete.MyBaseProperty, mapped.MyBaseProperty);
        Assert.AreEqual(concrete.MyClassProperty, mapped.MyClassProperty);
    }

预期:“ MyClass”但为:null

public class MyClass : MyBaseClass, IMyInterface
{
    public string MyClassProperty { get; set; }        
}

public interface IMyInterface : IMyBaseInterface
{
    string MyClassProperty { get; }        
}

public class MyBaseClass : IMyBaseInterface
{
    public string MyBaseProperty { get; set; }
}

public interface IMyBaseInterface
{
    string MyBaseProperty { get; } 
}

环境:

Automapper:4.1.1.0 / .NET 4.5 / VS 2013

解决方法:添加Mapper.CreateMap<MyClass, MyClass>();

我不认为以上是真正的答案。 因为这意味着如果我有多个实现,则必须为所有组合创建映射。 如果我编写一个新的实现,并添加另一个映射,即使它们始终都实现相同的接口。

如果使用继承,并且要将其与Automapper结合使用,则必须说Automapper该类是这些类的基础,并且这些类是该类的子类。 我遇到了同样的问题,并且只有当我指定所有继承关系时,它才开始起作用

最好检查有关继承配置的文档页面

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM