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

时间:2010-01-14 14:31:15

标签: plugins dependency-injection inversion-of-control

我在IoC / plugin框架构建的应用程序中看到的常见事情之一是从动态加载的插件向菜单或工具栏添加命令。例如,应用程序的默认插件提供“新建,打开,保存”等操作,这些操作显示在工作区中某个项目的上下文菜单中。新插件可能会添加“邮件,发布,加密”命令,但这些命令在哪里显示“新建,打开,保存”?

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

  • 是否需要插件中提供有关如何对项目进行分组或订购的提示的元数据?
  • 它是否使用先前已知菜单名称(或ID)的配置文件来定义顺序(对我来说似乎有点弱)?
  • 或者是“未知”插件被视为二等公民并且总是被转储到子菜单中?
  • 我从未想象过的东西(我希望在答案中看到)

2 个答案:

答案 0 :(得分:1)

您可以基本上向订单询问订单。

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

答案 1 :(得分:0)

我不知道在其他框架中如何做到这一点,但我可以解释Mono.Addins如何支持它。使用Mono.Addins,您将声明菜单的扩展点。加载项可以在其上注册命令。诀窍是扩展(在这种情况下是命令)可以有一个标识符,并且当注册扩展时,您可以在必须插入之前或之后指定另一个扩展的标识符。