我正在开发一个大量使用插件的应用程序。该应用程序是在C#中,我正在考虑在WPF中构建配置图形用户界面。关于如何管理实际的插件本身,我得到了插件架构。然而,每个插件都有自己的配置,这就是我寻求帮助的地方。
插件架构很简单--有一个插件实现的接口,我只需要加载一个目录中的所有插件即可。但是,这些插件的配置是从哪里来的呢?我希望有一些通用的方法来处理这个问题,这样每个插件就不会负责读取自己的配置文件。另外,我希望GUI能够随着每个插件的扩展而扩展--也就是说,每个安装的插件都应该在GUI中添加一个选项卡,其中包含该插件的特定配置选项。然后,在保存时,将保存配置文件。
我做这件事的最佳方式是什么?
发布于 2009-11-18 23:37:41
定义可配置插件的接口:
public interface IConfigurable
{
public void LoadConfig(string configFile);
public void ShowConfig();
// Form or whatever, allows you to integrate it into another control
public Form GetConfigWindow();
}
只需调用可配置插件的IConfigurable接口。
如果你愿意,你可以让界面以另一种方式工作,让主应用程序为插件提供一个容器(例如一个框架或一个dock ),让它感觉起来也是如此,但我建议采用另一种方式。
public interface IConfigurable
{
void LoadConfig(string configFile);
void ShowConfig(DockPanel configurationPanel);
}
最后,您可以通过准确地定义插件可以提供的配置选项来实现这一点。
public interface IMainConfigInterop
{
void AddConfigurationCheckBox(ConfigurationText text);
void AddConfigurationRadioButton(ConfigurationText text);
void AddConfigurationSpinEdit(Confguration text, int minValue, int maxValue);
}
public interface IConfigurable
{
void LoadConfig(string configFile);
void PrepareConfigWindow(IMainConfigInterop configInterop);
}
当然,这个选项更具限制性,也更安全,因为您可以完美地限制插件与配置窗口的交互方式。
发布于 2010-04-13 18:44:55
为了处理完全相同的问题(因为dll文件不能读取它们的配置文件),我实现的方法是定义了两个接口,一个用于插件IPlugin
,另一个用于主机IHost
。该插件是使用对主机的引用(实现IHost
接口)创建和初始化的。
interface IHost {
string[] ReadConfiguration(string fileName);
}
interface IPlugin {
void Initialize(IHost host);
}
class MyPlugin : IPlugin {
public void Initialize(IHost host) {
host.ReadConfiguration("myplygin.config");
}
}
然后,IHost
可以提供所有插件之间所需的任何通用功能(如读取和写入配置),并且插件还可以更好地了解您的主机应用程序,而无需锁定到特定的主机应用程序。例如,您可以编写一个Web服务应用程序和一个使用相同插件API的表单应用程序。
另一种方法是使用主机应用程序读取的配置信息初始化插件,但是,我需要插件能够按需读/写它的配置,并执行其他操作。
发布于 2009-11-19 02:15:06
微软鼓励开发人员使用此方法- Composite Application Guidance for WPF and Silverlight
https://stackoverflow.com/questions/1756795
复制相似问题