【发布时间】:2011-07-31 11:58:18
【问题描述】:
我正在使用AutoMapper 在我的应用程序的不同层之间映射对象。 一方面,我有一个如下所示的界面:
public interface MyRepo
{
IEnumerable<IRootObject> GetItems(param);
}
IRootObject 如下所示:
public interface IRootObject
{
int Id { get; set; }
DateTime? Date { get; set; }
}
public interface IFirstSubObject : IRootObject
{
string MyFirstProp { get; set; }
}
public interface ISecondSubObject : IRootObject
{
string MySecondProp { get; set; }
}
所以GetItems()call 实际上返回了一个只有IxxxSubObjectItems 的数组。
另一方面,结构如下所示:
public abstract class MyCustomRoot
{
protected MyCustomRoot(){}
public int Id { get; set; }
public DateTime? Date { get; set; }
}
public class MyCustomFirstSub : MyCustomRoot
{
public MyCustomFirstSub() : base() {}
public string MyFirstProp { get; set; }
}
public class MyCustomSecondSub : MyCustomRoot
{
public MyCustomSecondSub () : base() {}
public string MySecondProp { get; set; }
}
现在我已经像这样设置了映射器
AutoMapper.Mapper.CreateMap<IRootObject, MyCustomRoot>
.Include<IFirstSubObject, MyCustomFirstSub>
.Include<ISecondSubObject, MyCustomSecondSub>();
AutoMapper.Mapper.CreateMap<IFirstSubObject, MyCustomFirstSub>();
AutoMapper.Mapper.CreateMap<ISecondSubObject, MyCustomSecondSub>();
但我不断收到 MapperExceptions(“无法构造抽象类”,这在某种程度上是有道理的)。我也打电话给AssertConfigurationIsValid,这通过了这段代码。
如果我不使 MyCustomRoot 类抽象,那么映射工作,但我得到一个 MyCustomRoot 对象列表,而我实际上想要一个 MyCustomxxxSub 列表,因为稍后会有一个工厂它使用这种类型来生成正确的 UI...
我希望有人能为我指出正确的方向!
谢谢!
【问题讨论】:
标签: c# interface abstract-class automapper