Автоматическое отображение пользовательских универсальных типов - как? - PullRequest
2 голосов
/ 19 июня 2010

Привет, ребята, я использую automapper версия 1.1.0.188

В моем AutoMapper.Configure я отображаю сущности в DTO и наоборот, вот так:

// entity >> DTO
Mapper.CreateMap<MetaTemplate, MetaTemplateDTO>();
Mapper.CreateMap<Person, PersonDTO>();     

// DTO >> Entity
Mapper.CreateMap<MetaTemplateDTO, MetaTemplate>();
Mapper.CreateMap<PersonDTO, Person>();

Когда я делаю приведенные ниже сопоставления (и наоборот), все работает нормально

Mapper.Map<entity, entityDTO>(entity);

Mapper.Map<List<entity>, List<entityDTO>>(entities);

Обратите внимание, что automapper просто работает со List <>, и мне не нужно ничего настраивать.

У меня есть универсальный контейнер (упрощенно для этого примера):

public class Container<T>
{
    public int TotalItems{get;set;}
    public IList<T> Items{get;set;}
}

Теперь, без каких-либо дополнительных настроек автоматической настройки, когда я делаю:

Mapper.Map<Container<entity>, Container<entityDTO>>(entityContainer);

Я получаю исключение автомата:

Отсутствует конфигурация карты типов или неподдерживаемое отображение. Исключение

Однако, если я добавлю эту строку в конфигурацию автонастройки для определенного типа, как показано ниже, тогда отображение контейнера будет работать.

Mapper.CreateMap<Container<PersonDTO>, Container<Person>>();

Однако он будет работать ТОЛЬКО для этого типа Person / PersonDTO.

Почему это? Как я могу заставить autopper распознавать класс Container, поскольку он распознает List <> ??

Я не хочу явно настраивать сопоставления для каждого типа СНОВА.

круто, ура

Ответы [ 2 ]

2 голосов
/ 20 июня 2010

Если ваш общий контейнерный класс ведет себя как список объектов, то вам лучше всего реализовать интерфейс IEnumerable.Тогда автомаппер должен иметь возможность перебирать объекты и отображать их соответствующим образом.

1 голос
/ 01 июля 2010

Ответ заключается в том, что Automapper просто не работает с неподдерживаемыми типами, даже если используемый вами тип является контейнером поддерживаемых типов.

Решением было сопоставить объект вручную

...