2011-01-06 4 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

DynamicMap 불필요한 될 경우 "할 수있는 가장 좋은 방법이"질문에 효과적으로 대답하기 까다로운 일이 될 수 있습니다. 한 눈에 문제가 발생하지 않습니다. ** **이 코드가 문제의 원인입니까? 귀하의 질문에 대한 이유는 무엇입니까? –

+0

아무런 문제가 발생하지 않았습니다! 더 좋은 방법이 있는지 궁금 해서요. 서로 다른 속성 이름으로 인해 두 클래스 간의 매핑이 일치하지 않으면 문제가 발생할 수 있습니다. – johndoe

+0

Mapper.DynamicMap (원본)이 동일한 작업을 수행해야합니다. GetRecentOrders(). (Mapper.DynamicMap )를 선택하고 To 확장 메서드를 모두 삭제할 수 있습니다. – jwize

답변

0

조심해야 할 것은지도를 반복해서 재정의하는 것입니다. 나는 이것으로부터 코드를 날려 버렸다.

메서드가 특정 유형에 묶여 있지 않으므로 CreateMap 호출을 제거하고 MapModel을 DynamicMap으로 변경하는 것이 좋습니다.

또한, 귀하의 의견은, 때 제네릭 매개 변수 유형은 IEnumerable을 경우 다음

관련 문제