2017-06-15 102 views
0

我有以下代码:如何初始化Automapper当信号源类型为未知

public static TDest Map2<TDest>(this object sourceObjInstance) where TDest : new() 
{ 
    var itemType = typeof(TDest); 
    var item = Activator.CreateInstance(itemType); 
    Mapper.Initialize((cfg => cfg.CreateMap<??????, TDest>()); 
    var result = Mapper.Map(sourceObjInstance, item, sourceObjInstance.GetType(), item.GetType()); 
    return (TDest)result; 
} 

所以,我不知道从哪里得到为mapper.initialize法源对象泛型参数(?????占位符)。 WCF将自动生成sourceObjInstance类。

+0

1-您不应在每次映射时都进行初始化。在应用程序启动时初始化并创建映射。然后在需要时映射。 2-总是知道你的地图。为每个需要映射到另一个类型的类型创建一个映射。 – Mik

回答

0

Automapper支持动态映射。如果在编译时不知道源/目标类型,请设置CreateMissingTypeMaps配置属性:

Mapper.Initialize(cfg => cfg.CreateMissingTypeMaps = true); 

object src = new Src(); 
object dest = new Dest(); 

Mapper.Map(src, dest);