我使用AutoMapper在我的應用程序的不同層之間映射對象。 在一邊我有一個看起來像這樣的接口: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
,因爲有一個工廠後來使用這種類型以生成正確的用戶界面...
我希望有人能指出我在這個正確的方向!
謝謝!
您能否更具體地說明您的問題與代碼有何不同?我嘗試過,但仍然有「抽象類不能創建」的例外... – guillaume31 2016-06-01 09:49:05
好吧,似乎版本4.x不起作用,但3.2。奇怪的。 – guillaume31 2016-06-01 13:13:31