Automapper 无法在层次结构上正确映射
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);
}
Expected: "MyClass"
But was: 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
这个 class 是这些 class 的基础,并且这些 class 是这个 class 的 children。我有同样的问题,只有当我指定了我所有的继承关系时它才开始工作
最好检查 this 有关继承配置的文档页面
我正在使用 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);
}
Expected: "MyClass" But was: 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
这个 class 是这些 class 的基础,并且这些 class 是这个 class 的 children。我有同样的问题,只有当我指定了我所有的继承关系时它才开始工作
最好检查 this 有关继承配置的文档页面