[英]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.