如何将后代类映射为基类?

时间:2016-10-21 15:19:54

标签: c# .net automapper

我在引用中有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中,我在SourceBaseDestination类之间进行映射。

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上。如果你想要你可以克隆我的示例存储库并使用真实样本。请记住,“继承的项目”可以不止一个。再次感谢你!

0 个答案:

没有答案