Automapperを使用して、インターフェイスをさまざまな実装 (シリアル化、ビュー モデル、データベース マッピングなど) にコピーしています。
私のコードはもっと複雑ですが、次のコード スニペット サンプルで問題を切り分けました。
次のコードを考えると、2 番目のアサーションが失敗しているため、何かを見落としているでしょうか。
[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; }
}
環境:
オートマッパー: 4.1.1.0 / .Net: 4.5 / VS 2013