如何允许插件公开特定于插件的菜单,将表单条目添加到应用程序设置......?

时间:2010-06-19 10:19:39

标签: c# .net architecture plugins

在开发支持插件的应用程序时,我想知道什么是允许插件在界面中创建自己的菜单条目,向现有菜单添加菜单选项,向应用程序的配置对话框添加某些选项的最佳方法,那种东西,以及如何处理保存这些变化?如果插件知道它已经添加到表单中的选项,它应该如何处理保存这些修改过的选项?

我认为更好的方法是公开像GetMenuOptions()或GetConfigurationOptions()这样的泛型方法,以便主机应用程序实际操作这些东西,而不是将menustrip对象或配置表单对象传递给它的插件修改?我是在正确的轨道上,设计明智吗?是否有一些共同的模式?

平台/语言:.net / c#

谢谢!

2 个答案:

答案 0 :(得分:1)

选项1:中央菜单条目存储库

  • 插件将其链接注册到所有菜单都使用的中央系统。
  • 存储库可以是低技术配置文件或高科技数据库,用户可以在管理部分配置。

优点

  • 所有菜单数据都保存在一个易于管理的中心位置
  • 菜单选项可以缓存和使用,而无需启动插件(更快)
  • eaiser将安全性包裹起来(因为它实际上是静态数据)。

选项2:按属性定义

  • 在精益公共程序集中定义一个或多个attributes(通过精简我的意思是很少/没有依赖);插件通过这些属性定义菜单选项。
  • 使用反射来获取选项 - 无论是在运行时,每次还是在应用启动时缓存。
  • 您也可以(通过您定义的属性)定义插件可以访问的用户角色配置文件,以控制对菜单选项的访问 - 例如admin / normal / aithenticated / un-authenticated users。

选项3:插件遵循界面,按需提供菜单数据

  • 菜单项的中央存储库是虚拟的,并且仅在运行时存在:当调用菜单时,它必须由逻辑构建。这很灵活但很复杂,可能效率不高。
  • 与每个插件通信的逻辑调用,无论该插件是否具有正在构建的菜单的任何菜单选项。是的,你可以这样做一次并缓存它 - 但你最好只选择diong选项1.

答案 1 :(得分:0)

常见的方法是使用动词和服务的组合。作为插件体系结构的一部分,您可以提供一个接口,例如IInterfaceService,您可以使用它来使用多个实例并使用它们来扩展您的界面,例如

public interface IInterfaceService
{
    IVerb[] GetVerbs(string category);
}


public interface IVerb
{
    string Category { get; }
    string Name { get; }


    void Action();
}

这显然非常简单,你需要充实你需要的东西。如果你将大多数扩展点基于类似的东西,你可以很容易地插入命令动词等。

希望能让你开始。