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

标签 c#

我有以下情况:

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

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

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

到目前为止,它运行良好..

现在,我有了 LibB; LibB 也有相同的设置机制并依赖于 LibA。

使用 LibA 和 LibB 的应用。

我想知道是否有一种方法可以实现: 每个应用程序都能够创建派生自 SettingsA 和 SettingsB 的类,然后我可以拥有一种机制,将 SettingsA 和 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";
    }
}

关于C# 在运行时合并类; MEF是一个好的候选人吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44766221/

相关文章:

c# - 使用 7zip sdk 压缩文件,但存档文件不是原始文件,无法使用 unrar 解压缩

C# 项目在很短的时间内为空?

c# - Assert.ThrowsException 测试在抛出异常时失败

c# - 如何在 ColdFusion 中引用 C# 库?

c# - 继承类的泥潭,如何让这段可维护的代码

C# .NET 2 Threading.Timer - 时间漂移

c# - 请求和处理包含字节 [] 文件的 Web-API 响应的最佳方式?

c# - 一次调用从 Redis 读取多个哈希值

c# - 如何取消和回滚部分工作流程

c# - 锁语句有多贵?