2015-06-05 60 views
-1
interface Parent 
{ 
    string A; 
    string C; 
} 
class ChildA : Parent 
{ 
    string A; 
    string C; 
} 
class ChildB : Parent 
{ 
    string A; 
    string C; 
} 

class RelatedC 
{ 
    string A; 
    string B; 
} 
//On app start 
Mapper.CreateMap<Parent,RelatedC>(); 
//Map member A only 

//In some other class 
var rel // RelatedC type object, not null has data 
var obj// ChildA type object, not null has data 
//I want to use the above map created to map rel and obj 
Mapper.Map(rel ,obj) 
//only property A will be overridden by rel, other properties for obj are not changed 

我想爲所有將使用接口的類使用接口映射器,我不想爲每個子類創建單獨的映射。 我該如何做到這一點?使用接口的自動映射器

+0

你就不能這樣做'VAR OBJ = Mapper.Map (REL)'?我不認爲你需要爲每個「Parent」實現者配置映射。 – Jasen

+0

@Jasen不,我不能這樣做,因爲在項目中使用的obj沒有使用new實現,它具有屬性,並且使用var obj = Mapper.Map(rel)基本上會創建一個新對象。所以rel會覆蓋obj的一些屬性(將被映射的屬性) – Varun

回答

0

您可以使用DynamicMap

Mapper.DynamicMap(relatedC, childA); 

這將映射A和保持C值。它不會創建新實例,並且這些值將直接映射到目標類型的對象(在此例中爲childA)。

編輯:這顯然只是,如果你先註冊測繪工作:

Mapper.CreateMap<RelatedC, Parent>(); 
+0

我已經嘗試過了,顯然這不起作用。它將無法映射,因爲它提供了錯誤,因爲沒有類的映射,而是接口,這是最初的問題。 – Varun

+0

然後你應該檢查你的代碼。它按預期工作。例如,你的'Parent'接口甚至不會像問題中提供的那樣進行編譯。 –