首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >具有GUI的插件体系结构

具有GUI的插件体系结构
EN

Stack Overflow用户
提问于 2009-11-18 23:30:07
回答 8查看 9.7K关注 0票数 21

我正在开发一个大量使用插件的应用程序。该应用程序是在C#中,我正在考虑在WPF中构建配置图形用户界面。关于如何管理实际的插件本身,我得到了插件架构。然而,每个插件都有自己的配置,这就是我寻求帮助的地方。

插件架构很简单--有一个插件实现的接口,我只需要加载一个目录中的所有插件即可。但是,这些插件的配置是从哪里来的呢?我希望有一些通用的方法来处理这个问题,这样每个插件就不会负责读取自己的配置文件。另外,我希望GUI能够随着每个插件的扩展而扩展--也就是说,每个安装的插件都应该在GUI中添加一个选项卡,其中包含该插件的特定配置选项。然后,在保存时,将保存配置文件。

我做这件事的最佳方式是什么?

EN

回答 8

Stack Overflow用户

发布于 2009-11-18 23:37:41

定义可配置插件的接口:

代码语言:javascript
复制
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 ),让它感觉起来也是如此,但我建议采用另一种方式。

代码语言:javascript
复制
public interface IConfigurable
{
  void LoadConfig(string configFile);

  void ShowConfig(DockPanel configurationPanel);
}

最后,您可以通过准确地定义插件可以提供的配置选项来实现这一点。

代码语言:javascript
复制
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);
}

当然,这个选项更具限制性,也更安全,因为您可以完美地限制插件与配置窗口的交互方式。

票数 8
EN

Stack Overflow用户

发布于 2010-04-13 18:44:55

为了处理完全相同的问题(因为dll文件不能读取它们的配置文件),我实现的方法是定义了两个接口,一个用于插件IPlugin,另一个用于主机IHost。该插件是使用对主机的引用(实现IHost接口)创建和初始化的。

代码语言:javascript
复制
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的表单应用程序。

另一种方法是使用主机应用程序读取的配置信息初始化插件,但是,我需要插件能够按需读/写它的配置,并执行其他操作。

票数 7
EN

Stack Overflow用户

发布于 2009-11-19 02:15:06

微软鼓励开发人员使用此方法- Composite Application Guidance for WPF and Silverlight

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1756795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档