簡體   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