如何在构造函数中使用 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);
}
我有一个具有属性的源类型和一个具有完全相同属性的目标类型。
在我为 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);
}