Тип отображения Automapper с подтипом

У меня есть случай, в котором мне нужно отобразить что-то вроде этого:

public class Event
{
    string Name {get;set;}
    int EventType {get;set;}
    SubType Sub {get;set;}
}

Проблема заключается в том, что способ отображения SubType внутри определяется EventType собственность Event учебный класс. Для разных типов событий я хочу отображать разные вещи.

Обычным способом является создание карт как для Event, так и для SubType - они не связаны друг с другом:

 map.CreateMap<EventDTO, Event>();
 map.CreateMap<SubTypeDTO, SubType>();

Как я могу сказать autopper изменить поведение в отображении SubType на основе Event.EventType?

PS> Я знаю, что это плохой дизайн, и он действительно должен быть решен путем рефакторинга всего этого (например, удаление EventType и создание подклассов). К сожалению, я унаследовал этот код, и мне просто нужно устранять ошибки, не тратя много времени.

1 ответ

Я не уверен, что есть что-то для этого, но вы могли бы сделать следующее:

 Mapper.CreateMap<EventDTO, Event>()
            .ForMember(to => to.Name, from => from.Ignore() )
            .ForMember(to => to.Sub, from => from.Ignore() )
            .ForMember(to => to.EventType, from => from.Ignore() )
            .AfterMap((source, dest) =>
                          {
                              switch (dest.EventType)
                              {
                                  case 1:
                                      // Behaviour EventType 1
                                      ...
                                      dest.Name = source.NameDTO + "1";
                                      ...
                                      break;
                                  case 2:
                                      // Behaviour EventType 2
                                      ...
                                      dest.Name = source.NameDTO + "2";
                                      ...
                                      break;
                                  default:
                                      // Behaviour EventType 3
                                      ...
                                      dest.Name = source.NameDTO + "0";
                                      ...
                                      break;
                              }
                          });
Другие вопросы по тегам