我正在一个Visual Studio外接的Visual Studio 2008的显示树视图,其提供关于在服务器产品内容的图。服务器产品含有不同类型的节点,并且每个节点都有其自己的类型的上下文菜单的(右击菜单)。

有关连接到目前,我只是将代码添加我的两个项目的节点新类型的节点和行动。我想断开我的节点类型和节点上可用的行动,我可以添加节点和条目,以上下文菜单插件模型等几个。 MEF可能会是一个很好的候选。有没有人对如何实现这个简单而直接的方式是一个好主意,这样特别的插件开发者不必做很多管道的?

有帮助吗?

解决方案

我将提供一个公共库,你的代码和插件库都全部链接(这个合同的依赖)。在那里,定义一个节点类型,像INodeType的接口。此外,考虑实施在那里实现INodeType,并提供一些有用的特性的AbstractNodeType该插件作者可以在其构造函数中设置。

一INodeType的属性是一个返回窗户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 ... */
}

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top