如何在构造函数中使用 AutoMapper 映射到 "this"

How to map to "this" with AutoMapper in constructor

我有一个具有属性的源类型和一个具有完全相同属性的目标类型。

在我为 AutoMapper 配置一个简单的映射后,如:

Mapper.CreateMap<MySourceType, MyDestinationType>();

我想要一个 MyDestinationType 的构造函数,它有一个 MySourceType 参数,然后像这样使用源自动初始化正在创建的类型的属性:

public MyDestinationType(MySourceType source)
{
    // Now here I am do not know what to write.
}

我找到的唯一解决方法是为

创建一个静态工厂方法
public static MyDestinationType Create(MySourceType source)
{
     return Mapper.Map<MyDestinationType>(source);
}

有什么办法可以避免这种静态的丑陋?

虽然我个人觉得很丑,但是你可以做的是:

public MyDestinationType(MySourceType source)
{
    Mapper.Map<MySourceType, MyDestinationType>(source, this);
}

我使用以下方法实现了这一点:

public MyDestinationType(MySourceType source)
{
    var mapperConfiguration = new MapperConfiguration(cfg =>
    {
        cfg.CreateMap<MySourceType, MyDestinationType>();
    });

    var mapper = mapperConfiguration.CreateMapper();

    mapper.Map(source, this);
}