2013-07-17 4 views
0

Привет, у меня возникли трудности с отображением пользовательской коллекции pagedlist, которую я создал.Autoapper map custom collection

У меня есть интерфейс pagedList так:

public interface IPagedList<T> : IList<T> 

а реализация:

public class PagedList<T> : List<T>, IPagedList<T> 

Отображение конфигурации:

Mapper.CreateMap<User, DestinationViewModel>() 
    .ForMember(f => f.Score, m => m.MapFrom(s => s.anotherProperty)); 

Я пытаюсь сопоставить коллекцию в моем действии контроллера например:

var users = userService.GetPagedUsers(page, size, sort, direction); 
var model = Mapper.Map<IPagedList<User>, IPagedList<DestinationViewModel>>(users); 

Во-первых, возможно ли это сделать? У меня был разведчик на стеке, и havent нашел окончательный ответ. Мне не повезло, что я только что получил InvalidCastOperations не может сопоставить общую коллекцию Пользователя с pagedlist из DestinationViewModel, которые были выброшены automapper. Использование другого типа списка, такого как IList, при сопоставлении с моделью, но мне нужно использовать интерфейс IPagedList для всех материалов пейджинга, которые у него есть. Любая помощь была бы очень признательна, слишком долго тянула мои волосы.

ответ

0

Закончив поиск ответа после большего количества исследований, это не так, automapper не поддерживает мой сценарий из коробки. Вот два варианта: Для пользовательского IObjectMapper, используя существующие Array/EnumerableMappers в качестве руководства или напишите настраиваемый TypeConverter.

0

Фактически, я считаю, что есть решение этого вопроса.

Отображение конфигурации:

Mapper.CreateMap<User, DestinationViewModel>(); 
Mapper.CreateMap<PagedList<User>, PagedList<DestinationViewModel>>() 
     .AfterMap((s, d) => Mapper.Map<List<User>, List<DestinationViewModel>>(s, d)); 

Тогда в сервис/контроллер:

var users = userService.GetPagedUsers(page, size, sort, direction); 
var model = Mapper.Map<PagedList<User>, PagedList<DestinationViewModel>>(users); 

Я не пробовал использовать интерфейс (IPagedList), только реализации (PagedList).