我在引用中有P
项目(dll)Automapper
。此项目包含用于映射的源类和基本目标类。定义:
public class Source
{
public Source()
{
}
// Properties ..
}
public class DestinationBase
{
public DestinationBase()
{
}
// Properties ..
}
项目P
还包含静态Mapper
初始化程序(在静态构造函数中),它将Source
类型映射到DestinationBase
类型。
public class DataMapping
{
public static DataMapping()
{
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Source, DestinationBase>();
// Another mapping ..
});
}
}
仅在P
中,我在Source
和BaseDestination
类之间进行映射。
public DestinationBase Map(Source s)
{
return Mapper.Map<DestinationBase>(s);
}
到目前为止,这么好。但是我有另一个项目( s ),例如Q
,它在引用中有P
(显然可以使用来自P
的类)。 Q
aslso包含DestinationDerived
类,该类派生自DestinationBase
。
public class DestinationDerived : DestinationBase
{
public DestinationDerived()
{
}
// Properties ..
}
我想在映射中使用与DestinationBase完全相同的方式DestinationDerived
。我为后代扩展了Map
函数,但是映射器抛出异常 - 从父级到后代,当然(我注册了父级,但我想要后代)。
public T Map<T>(Source s) where T: DestinationBase
{
return Mapper.Map<T>(s);
}
我的问题:在我的情况下,如何更改代码或拆分/扩展配置以映射后代类,如基类,即从{{1为每个派生类调用Map
喜欢
DestinationBase
备注:
*可以更改或拆分配置
*移动课程或配置是不可能的
*我知道var derived = Map<DestinationDerived>(new Source());
和Include
,但IncludeBase
不知道P
中的类型,我无法将整个映射器配置移至{ {1}}(因为我在同一级别有许多项目,例如Q
派生的classe)
*我只想要一个映射器
*我需要Q
的基本配置扩展Q
的特定(派生)配置
*我知道第二个映射器的双重映射可能性(DestinationBase
)。我已经使用它,但我只想要一个映射(性能)。
*如果您需要其他信息,请告诉我!
谢谢!
更新1:
我创建了我的问题的小样本。我将sample放在我的github上。如果你想要你可以克隆我的示例存储库并使用真实样本。请记住,“继承的项目”可以不止一个。再次感谢你!