2011-03-17 54 views
0

有沒有一種方法可以僅爲源自動提供AutoMapper,並基於該源的類型的指定映射自動確定要映射到的內容?AutoMapper根據通用類型確定要映射的內容

因此,例如我有一個Foo類型,我總是希望它映射到酒吧,但在運行時我的代碼可以接收任何一種泛型類型。

 public T Add(T entity) 
     { 
      //List of mappings 
      var mapList = new Dictionary<Type, Type> { 
         {typeof (Foo), typeof (Bar)} 
         {typeof (Widget), typeof (Sprocket)} 
         }; 

      //Based on the type of T determine what we map to...somehow! 
      var t = mapList[entity.GetType()]; 

      //What goes in ?? to ensure var in the case of Foo will be a Bar? 
      var destination = AutoMapper.Mapper.Map<T, ??>(entity); 
     } 

任何幫助,非常感謝。

+1

您是否嘗試過使用非泛型重載:「Map(object source,Type sourceType,Type destinationType)」? – tobsen 2011-03-17 20:44:44

回答

3

由於@tobsen說,非泛型重載是你所需要的:

public T Add(T entity) 
    { 
     //List of mappings 
     var mapList = new Dictionary<Type, Type> { 
        {typeof (Foo), typeof (Bar)} 
        {typeof (Widget), typeof (Sprocket)} 
        }; 

     Type sourceType = typeof(T); 
     Type destinationType = mapList[sourceType]; 
     object destination = AutoMapper.Mapper.Map(entity, sourceType, destinationType); 
     // ... rest of code 

    } 

根據我的經驗,只有當你知道源/目標類型事先通用超載是非常有用的。

+0

謝謝你的回覆。這也是我得出的結論。應該回來並更新我的答案! – 2011-03-25 08:24:47