我正在使用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()
调用实际上返回一个仅包含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...
希望有人能指导我正确的方向!
谢谢!