2011-01-06 6 views
0

私は私のviewmodelクラスと私のwcfサービスクラス(別のプロジェクト)を持っています。私はviewmodelクラスをwcfクラスに変換する必要があり、逆もまた同様です。現在、私は以下の方法を使用しています:AutoMapperを使用した双方向変換

public static class ExtensionMethods 
{ 
    public static object To<T>(this object source) 
    { 
     // create the map 
     Mapper.CreateMap(source.GetType(), typeof (T)); 

     // if the source is a list 
     if(source is IEnumerable) 
     { 
      return Mapper.Map(source, source.GetType(), typeof (List<T>)); 
     } 

     // return the mapping 
     return (T) Mapper.Map(source, source.GetType(), typeof (T)); 
    } 

} 

// converting the wcf class to viewmodel 
var orders = (List<OrderStatusViewModel>) _orderStatusServiceClient.GetRecentOrders().To<OrderStatusViewModel>(); 
// converting the viewmodel to the wcf class 
var order = (Order) orderStatusViewModel.To<Order>(); 

これはこれを行う最良の方法ですか?ビューモード=> wcfクラスとwcfクラス=> viewmodelの両方の方向でこれを実行する必要があることに注意してください。

+0

と不要だろうならば、あなたの質問「これを行うための最善の方法は、」効果的に答えることは難しいことができます。一見すると、私は問題を見ません。 ** **このコードは問題を引き起こしていますか?あなたの質問の理由は何ですか? –

+0

問題は発生していません!私はもっ​​と良い方法があるのだろうかと思っていた。異なるプロパティ名のために2つのクラス間のマッピングが一致しない場合、問題が発生する可能性があります。 – johndoe

+0

Mapper.DynamicMap (source)も同じことをする必要があります。 GetRecentOrders()。(Mapper.DynamicMap )を選択し、To拡張メソッドを完全に削除します。 – jwize

答えて

0

注意しなければならないことは、地図を何度も何度も再定義することです。私はこれからコードが爆発した。

あなたのメソッドが特定の型に縛られていないので、CreateMap呼び出しを削除し、Map呼び出しをDynamicMapに変更することをお勧めします。また

、あなたの入力したとき、あなたのジェネリックパラメータの型がIEnumerableをされた場合、DynamicMap

関連する問題