2012-03-07 224 views
0

對於我的ASP.NET Web應用程序,我目前使用Automapper從模型(DTO) - >查看模型進行映射。我的視圖模型具有所有字符串屬性,因爲我使用了Mustache,一種無邏輯的模板引擎。Automapper:映射層次結構

我暴露了一個API來我的網站(通過JSON等),以及我倒是喜歡要做的就是執行以下映射:

Model -> Base ViewModel -> Web ViewModel 

那麼,「基本視圖模型」可以序列化爲我的API(例如數值爲貨幣)。從那裏開始,我將爲我的「Web ViewModel」(例如格式化貨幣值字符串,鏈接等)做一個簡單的映射。

問題是,我似乎無法得到這個工作。單獨定義Model -> Base ViewModel映射和Base ViewModel -> Web ViewModel映射是不夠的,它看起來像我的Web ViewModel,並且如果我明確添加映射,Automapper只是試圖直接映射,跳過我依賴的中間步驟。

Can/should Automapper可以像這樣使用嗎?我意識到我可能明確地做了兩次連續轉換以獲得正確的結果,但我想我會在這裏問我是否可以讓Automapper在一步中處理轉換。

回答

0

嗯,我不相信(或說實話,我不知道如何),這可能是可能的。

但你可以嘗試

創建映射

Model.CreateMap<Model, BaseViewModel>()... 
Model.CreateMap<BaseViewModel, WebViewModel>()... 

,並嘗試一個通用的助手這樣,要改變您的需求

public static void TwoStepMapping<TSource, TIntermediate, TDest>(TSource source, TDest dest) where TIntermediate : new() 
      { 
       Mapper.Map(Mapper.Map(source, new TIntermediate()), dest); 
      } 

電話:

TwoStepMapping<Model, BaseViewModel, WebViewModel>(model, webViewModel);