2012-03-07 173 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);