2012-03-07 16 views
0

私のASP.NET Webアプリケーションでは、現在Automapperを使用してモデル(DTO) - >ビューモデルからマップしています。私のビューモデルは、ロジックレスのテンプレートエンジンMustacheを使用しているため、すべての文字列プロパティを持っています。Automapper:マッピング階層

私は(JSONなどを経由して)私のウェブサイトにAPIを暴露し、私は次のマッピングを実行されてやってようをあろうことだ。そして、

Model -> Base ViewModel -> Web ViewModel 

を、「ベースViewModelに」私のAPIのためにシリアル化することができます(例えば、通貨の数値を使用)。そこから、私は "Web ViewModel"(例えば、フォーマットされた通貨値の文字列、リンクなど)のための簡単なマッピングを行います。

問題は、私はこれを動作させるように見えることはできません。 Model -> Base ViewModelマッピングとBase ViewModel -> Web ViewModelマッピングを別々に定義するだけでは、Web ViewModelを取得できないようで、Model -> Web ViewModelマッピングを明示的に追加すると、Automapperは依存している中間ステップをスキップして直接マッピングを試みます。

Automapperはこのように使用できますか?正しい結果を得るために明示的に2つの連続した変換を明示的に行うことは可能だろうと私は考えていますが、ここではAutomapperが変換を1つのステップで処理できるかどうかを尋ねると思います。

答えて

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);