Как сопоставить "это" с AutoMapper в конструкторе
У меня есть тип источника, который имеет свойства и тип назначения, которые имеют точно такие же свойства.
После того, как я настроил одно простое сопоставление для 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);
}
Есть ли способ не иметь этого статического безобразия?
2 ответа
Решение
Хотя я лично нахожу это уродливым, вы можете сделать следующее:
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);
}