[英]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.