1

我所有的模型类都有一个公共构造函数,它接受一个会话/工作单元对象(我正在使用的 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?

4

0 回答 0