2015-06-05 57 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'接口甚至不会像问题中提供的那样进行编译。 –