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

7

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

在我像下面这样为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);
}

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

为什么要构建一个构造函数?你想要能够调用 MyDestinationType destinationobj = new MyDestinationType(sourceobj); 但这与简单地调用 MyDestinationType destinationobj = Mapper.Map<MyDestinationType>(sourceobj); 是一样的。如果你真的需要一个单独的构造函数,你可以尝试 this = Mapper.Map<MyDestinationType>(source); 但我不确定是否可以直接赋值给 this。编辑:我测试过了,你不能赋值给 this - Nils O
2个回答

10

虽然我个人认为它不太好看,但你可以这样做:

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

0

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

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

    var mapper = mapperConfiguration.CreateMapper();

    mapper.Map(source, this);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接