我所有的模型类都有一个公共构造函数,它接受一个会话/工作单元对象(我正在使用的 ORM 需要)。但是,它们也继承自一个通用基类 XPObject,该基类带有一个需要此会话对象的受保护构造函数,如下所示
public class XPObject
{
protected XPObject(Session session) { ... }
}
public class Person
{
public Person(Session session) : base(session) { ... }
}
反过来,DTO 都继承自具有默认构造函数的公共基类 EntityDto。
我的映射如下所示
cfg.CreateMap<PersonDto, Person>();
当我尝试将 DTO 映射到新对象时
mapper.Map<Person>(dto);
我会得到预期的错误,即无法创建对象,因为它没有空的构造函数。
我试图通过使用 ForCtorParam 选项来配置映射器来解决这个问题:
CreateMap<EntityDto, XPObject>()
.DisableCtorValidation()
.ForCtorParam("session", _ => _.MapFrom((dto, ctx) => ctx.Mapper.ServiceCtor(typeof(UnitOfWork))))
.IncludeAllDerived();
不幸的是,这失败了,因为 XPObject 类的构造函数受到保护。
我怎样才能解决这个问题而不必为每个映射单独配置CtorParam?