我有基類Automapper抽象類
public abstract class DtoBase //NOTICE that this class is abstract
{
//some DTO specific things
}
public class concreteA_Dto : DtoBase
{
//some properties from A
}
public class concreteB_Dto : DtoBase
{
//some properties from B
}
,然後我有一些類,他們不知道彼此
public class concreteA //NOTICE that there is NO base class
{
//some properties from A
}
public class concreteB
{
//some properties from B
}
我想是使用Automapper這樣:
private DtoBase GetResourceDto(object value)
{
return Mapper.Map<DtoBase>(value);
}
到目前爲止,我的映射如下所示:
CreateMap<concreteA, DtoBase>()
.Include<concreteA, concreteA_Dto>();
CreateMap<concreteA, concreteA_Dto>();
但是,當我調用方法GetResourceDto與concreteA的一些例子中,我會得到
Automapper例外:
Mapping types:
concreteA-> DtoBase
#NAMESPACE.concreteA -> #NAMESPACE.DtoBase
Destination path:
DtoBase
與內部異常不能創建抽象類的
實例。
注意#NAMESPACE是我
類的命名空間如何進行適當的映射,這將避免這種例外?這背後
的想法是,concreteA和concreteB可以dynamicaly長的時間,有可能是concreteC,澆築等 我不介意加入映射爲更具體的類
不能映射到一個抽象類,AutoMapper創建你映射到的和錯誤說,你不能實例化一個抽象類的類的新實例。使你的基類具體而且可行,抽象類是不合適的,因爲你確實想創建它的實例。 – 2014-09-30 12:41:38
其實我不想創建DtoBase的實例,我期望GetResourceDto的返回值是concreteA_Dto的實例。 – LightCZ 2014-09-30 12:43:18
像這樣使用automapper時,類層次結構必須匹配。如果你在「具體」層次結構中創建一個基類,事情應該可以正常工作。 – 2014-09-30 13:26:42