Тип отображения 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;
}
});