我有以下情况:
具有默认设置的公共(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/