我将提供一个公共库,您的代码和插件库都链接到该库(称为合同依赖项)。在那里,为节点类型定义一个接口,例如 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 ... */
}
我希望我没有弄乱语法,但这是一般的想法。