Plugins 订购IoC/插件框架注入的菜单项的最佳方式

Plugins 订购IoC/插件框架注入的菜单项的最佳方式,plugins,dependency-injection,inversion-of-control,Plugins,Dependency Injection,Inversion Of Control,在基于IoC/插件框架构建的应用程序中,我看到的一件常见的事情是从动态加载的插件向菜单或工具栏添加命令。例如,应用程序的默认插件提供“新建、打开、保存”等操作,这些操作显示在工作区中某个项目的上下文菜单中。一个新的插件可能会添加“Mail,Post,Encrypt”命令,但是这些命令在哪里显示与“new,Open,Save”相关的内容呢 通过IoC加载组件的应用程序如何对注入的项施加顺序 它是否需要来自插件的元数据来提示如何对项目进行分组或排序 它是否使用以前已知的菜单名(或ID)的配置文件来

在基于IoC/插件框架构建的应用程序中,我看到的一件常见的事情是从动态加载的插件向菜单或工具栏添加命令。例如,应用程序的默认插件提供“新建、打开、保存”等操作,这些操作显示在工作区中某个项目的上下文菜单中。一个新的插件可能会添加“Mail,Post,Encrypt”命令,但是这些命令在哪里显示与“new,Open,Save”相关的内容呢

通过IoC加载组件的应用程序如何对注入的项施加顺序

  • 它是否需要来自插件的元数据来提示如何对项目进行分组或排序
  • 它是否使用以前已知的菜单名(或ID)的配置文件来定义顺序(对我来说似乎有点弱)
  • 还是“未知”插件被视为二等公民,总是被扔进子菜单
  • 一些我从未想象过的事情(我希望在答案中看到)

您基本上可以要求订购物品


我的意思是你定义四个块(1.新建并打开,2.保存,3.打印,4.退出)。插件现在可以告诉应用程序有优先块。例如,一个插件希望添加打印功能,以便为第3块提供pref。

您基本上可以要求订购物品


我的意思是你定义四个块(1.新建并打开,2.保存,3.打印,4.退出)。插件现在可以告诉应用程序有优先块。例如,一个插件想要添加打印功能,因此它为block 3提供了pref。

我不知道在其他框架中是如何做到这一点的,但我可以解释Mono.Addins是如何支持它的。使用Mono.Addins可以声明菜单的扩展点。外接程序将能够在其上注册命令。诀窍在于扩展(本例中的命令)可以有一个标识符,注册扩展时,可以指定另一个扩展的标识符,在该标识符之后或之前插入扩展

我不知道这在其他框架中是如何实现的,但我可以解释Mono.Addins是如何支持它的。使用Mono.Addins可以声明菜单的扩展点。外接程序将能够在其上注册命令。诀窍在于扩展(本例中的命令)可以有一个标识符,注册扩展时,可以指定另一个扩展的标识符,在该标识符之后或之前插入扩展