1

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

4

2 に答える 2