与MEF

2011-08-09 55 views
1

我想拿出类似什么的Visual Studio 2010提供了菜单和上下文菜单的架构,这样我可以延长我的当前菜单通过扩展提供额外的子项.NET应用程序扩展菜单和上下文菜单。我正在使用MEF(Managed Extensibility Framework)。 作为一个例子,ReSharper的扩展添加菜单项和上下文菜单项,在任何可能的位置(顶部,中部或底部的上下文菜单或菜单项) 怎会去提供这样的功能呢?我是否必须对shell的每个菜单项进行索引,并将扩展名引用索引以将其放置在子项上? 我希望我的问题很清楚。如果没有,我会很乐意补充一些澄清。与MEF

回答

0

我不知道有这样做一个最好的办法。但是,这里有一些想法来考虑:

一个相当简单的解决方法是使用一个单一的合同(即IMenuIten),并使用元数据来控制哪些菜单命令出现在什么位置。要做到这一点的方法之一是有一个“指数”,尽管它也许应该是一张双人床和用于在菜单中的项目,每个项目并不需要知道在菜单中的绝对位置排序。另一种方法是在菜单项上添加元数据,以提供当前项目之前和之后的其他项目列表。然后,您可以对菜单项进行拓扑排序以获得显示它们的订单。

根据菜单行为的复杂程度/动态需求,您可能会发现无法使用导出元数据。在这种情况下,您可能会将功能移至合同本身 - 即在您的IMenuItem合同中添加属性或方法。这样你可以运行代码来计算你需要的值。

另一种解决方案是不出口的菜单项直接的。相反,您可以拥有由组件导入的菜单服务。该服务将有一个注册方法,它将一个菜单项添加到菜单中。在我看来,这使得添加菜单项相当麻烦一些,所以我不会推荐它,除非有你需要它的原因。如果可用菜单项应基于应用程序的当前上下文而改变,则可能是合适的。请注意,如果你这样做,只要有一个导入菜单服务的类不会导致类被创建和组合。该类需要导出系统中其他位置导入的内容。