1

我正在为 Visual Studio 2008 开发一个 Visual Studio 加载项,它显示一个树形视图,提供服务器产品中内容的视图。服务器产品包含不同类型的节点,每个节点都有自己类型的上下文菜单(右键菜单)。

对于新类型的节点和连接到节点的操作,我目前只添加代码两个我的项目。我想断开我的节点类型和节点上可用的操作,以便我可以使用插件模型将节点和条目添加到上下文菜单中。MEF 可能是一个不错的候选人。有没有人对如何以简单直接的方式实现这一点有一个好主意,这样尤其是插件开发人员不必做很多工作?

4

1 回答 1

1

我将提供一个公共库,您的代码和插件库都链接到该库(称为合同依赖项)。在那里,为节点类型定义一个接口,例如 INodeType。另外,考虑在那里实现一个 AbstractNodeType ,它实现了 INodeType 并提供了一些有用的属性,插件作者可以在他们的构造函数中设置这些属性。

INodeType 的属性之一是返回 Windows 窗体上下文菜单的 ContextMenu 属性。

在您的代码中创建一个属性:

[Import("NodeTypes", typeof(INodeType))]
public IEnumerable<INodeType> extensionNodeTypes { get; set; }

你可以在你写完之后列举出来。

在插件代码中,他们会声明类似这样的新节点类型(可能无法编译):

[Export("NodeTypes", typeof(INodeType))]
public class SomeNodeType : AbstractNodeType
{
    public SomeNodeType()
    {
        this.ContextMenu = base.BuildContextMenu(/* ... */);
        /* etc. */
    }
    /* ... other custom logic ... */
}

我希望我没有弄乱语法,但这是一般的想法。

于 2009-06-01T00:00:16.967 回答