gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:03:49 26 4
gpt4 key购买 nike

我有以下情况:

具有默认设置的公共(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com