繁体   English   中英

C#在运行时合并类; MEF是一个很好的候选人

[英]C# Merging classes at run time; is MEF a good candidate

我有以下情况:

具有默认设置的通用库“ LibA”。 默认设置通过抽象类“ SettingsA”实现。 这些设置在LibA中使用。

每个使用LibA的应用程序都必须实现一个从SettingsA派生的类,并覆盖它们想要更改的任何内容。

在LibA中,有一个单例类可以找到派生类并从中返回设置,因此LibA可以访问覆盖的设置。

到目前为止,效果很好。

现在,我有了LibB; LibB也具有相同的设置机制,并且取决于LibA。

使用LibA和LibB的应用程序。

我想知道是否可以在以下地方实现某种方法:每个应用程序都可以创建派生自SettingsA和SettingsB的类,然后可以使用一种将“ SettingA”和“ SettingsB”归为同一API的机制。

从本质上讲,它的行为就像是应用程序将使用SettingsA,SettingsB以及基于应用程序设置的覆盖条目构建全局词典一样。

我不想使用字典,因为突然之间我们不能使用自动完成功能,并且人们会开始拼错名字等。

我当时将MEF看作是将几个类“导入”到一个类的一种方法。 但是,走那条路有意义吗?

动态没有意义,因为它在本质上也像字典一样。

您可以编写类似Decorator模式的内容,但是有两个字段引用不同的设置基类。

public abstract class MergeSettingsBase : ISettingsA, ISettingsB
{
    private readonly ISettingsA _settingsA;
    private readonly ISettingsB _settingsB;

    public MergeSettingsBase(ISettingsA settingsA, ISettingsB settingsB)
    {
        _settingsA = settingsA;
        _settingsB = settingsB;
    }

    string ISettingsA.SomeValue {
        get {
            return _settingsA.SomeValue;
        }
    }

    int ISettingsB.AnotherValue {
        get {
            return _settingsB.AnotherValue;
        }
    }
}

public class Settings : MergeSettingsBase {
    override string ISettingsA.SomeValue {
        return "abc";
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM