Automapper abstract class

本文关键字:class abstract Automapper | 更新日期: 2023-09-27 18:25:08

我有基类

 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>();

但是当我用concreteA的某个实例调用方法GetResourceDto时,我会得到

Automapper异常:

Mapping types:
concreteA-> DtoBase
#NAMESPACE.concreteA -> #NAMESPACE.DtoBase
Destination path:
DtoBase

内部异常

无法创建抽象类的实例

注意#NAMESPACE是类的名称空间

如何执行正确的映射以避免此异常?

这背后的想法是,混凝土A和混凝土B可以随着时间的推移而动态增长,可能会有混凝土C、混凝土D等。我不介意为更具体的类

Automapper abstract class

添加映射

除非不使用代理类进行映射,否则您可能经常会遇到类似的映射问题。

为要映射的每个类创建代理类。

您可以从这里获得更多帮助