2013-07-17 92 views
0

嗨即時通訊有困難映射我創建的自定義pagedlist集合。Automapper地圖自定義集合

我有一個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); 

首先,它甚至可以做到這一點?我有一個偵察員在堆棧,並沒有找到一個明確的答案。到目前爲止,我沒有運氣,我只收到InvalidCastOperations無法將User的通用集合映射到AutoMapper引發的DestinationViewModel的pagedlist。在映射到模型時使用像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)嘗試。