2011-01-06 11 views
0

Ich habe meine Viewmodel-Klassen und auch meine WCF-Service-Klassen (separates Projekt). Ich muss die Viewmodel-Klassen in wcf-Klassen konvertieren und umgekehrt. Derzeit verwende ich die folgende Methode:Zwei-Wege-Konvertierung mit 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>(); 

Ist dies der beste Weg, dies zu tun? Denken Sie daran, ich muss dies in beiden Richtungen durchführen, d. H. Viewmodel => wcf-Klassen und wcf-Klassen => viewmodel.

+0

„Der beste Weg, dies zu tun“ können Fragen schwierig sein, effektiv zu beantworten. Auf einen Blick sehe ich kein Problem. ** Ist ** dieser Code ein Problem? Was ist der Grund für deine Frage? –

+0

Es verursacht keine Probleme! Ich habe mich gefragt, ob es einen besseren Weg gibt. Das Problem kann auftreten, wenn die Zuordnung zwischen den beiden Klassen aufgrund unterschiedlicher Eigenschaftsnamen nicht übereinstimmt. – johndoe

+0

Mapper.DynamicMap (Quelle) sollte das gleiche tun. Sie könnten dies tatsächlich tun: GetRecentOrders(). Wählen Sie (Mapper.DynamicMap ) und löschen Sie die Erweiterungsmethode To vollständig. – jwize

Antwort

0

Eine Sache, auf die Sie achten sollten, ist, Ihre Karten immer wieder neu zu definieren. Ich habe einen Code davon bekommen.

Da Ihre Methode nicht an bestimmte Typen gebunden ist, würde ich empfehlen, den CreateMap-Aufruf zu entfernen und die Map-Aufrufe von DynamicMap zu ändern.

Auch, wenn Ihr generischer Parameter Typ IEnumerable ist, wenn Sie Ihre Eingabe ist, dann, wenn sie mit DynamicMap unnötig wäre