Как сопоставить "это" с 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);
}
Другие вопросы по тегам