Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C语言中开发基于动态插件的功能#_C#_Dynamic_Plugins_Extensibility_Menu - Fatal编程技术网

C# 如何在C语言中开发基于动态插件的功能#

C# 如何在C语言中开发基于动态插件的功能#,c#,dynamic,plugins,extensibility,menu,C#,Dynamic,Plugins,Extensibility,Menu,我一直在寻找为我的应用程序提供插件支持的不同方法。理想情况下,我将创建一个核心功能,并根据不同的客户开发不同的插件/插件,如导入、导出数据等。。。有哪些方法可以使C#应用程序通过插件体系结构进行扩展 让我们举个例子。如果我们有一个由主菜单(文件、编辑、查看等)和树视图组成的程序,树视图显示按制造商分组的不同品牌的汽车(目前为福特、通用)。右键单击汽车会显示一个上下文菜单,其中唯一的选项是“删除汽车” 您如何开发应用程序,以便部署插件,从而允许一位客户在树视图(比如本田)中看到一个新品牌,并扩展汽

我一直在寻找为我的应用程序提供插件支持的不同方法。理想情况下,我将创建一个核心功能,并根据不同的客户开发不同的插件/插件,如导入、导出数据等。。。有哪些方法可以使C#应用程序通过插件体系结构进行扩展

让我们举个例子。如果我们有一个由主菜单(文件、编辑、查看等)和树视图组成的程序,树视图显示按制造商分组的不同品牌的汽车(目前为福特、通用)。右键单击汽车会显示一个上下文菜单,其中唯一的选项是“删除汽车”

您如何开发应用程序,以便部署插件,从而允许一位客户在树视图(比如本田)中看到一个新品牌,并扩展汽车上下文菜单,以便他们现在可以“油漆汽车”

在Eclipse/RCP开发中,这可以通过扩展点和插件轻松处理。C#如何处理?我一直在研究开发自己的插件体系结构,并阅读MEF。

将是一个很好的起点

格伦·布洛克的文章提供了一个很好的概述


顺便说一句,不要被标题愚弄了-你也可以为.NET 3.5 SP1获得MEF。

Visual Studio 2010使用MEF,所以我认为这是一个安全的赌注,这是MS的首选方式。它似乎总是有点沉重,但如果你需要加载项始终工作并且你的代码库不断发展,它可能是一个更好的选择


如果您关心隔离外接程序,您应该阅读AppDomains。我有一个演示项目,我做这个项目是为了帮助你学习如何处理,你可能会觉得很有趣。关于隔离的快速事实:只有您的类型应该跨越边界,并且这些类型应该被密封,从跨域事件处理中运行,并且加载项不应该扩展MarshallByRefObject。

我观看了许多MEF视频,其中显示了加载程序集、catelogs、,然而,我还没有完全理解MEF如何允许您部署一个插件来修改给定控件的主菜单或上下文菜单。我想我错过了视频描述的最后一个跳跃,并允许我的应用程序响应插件的呈现。例如,在主菜单中添加一个新的菜单按钮。如果使用MVVM(),应该更容易理解。这将使您能够将菜单和菜单项绑定到底层(可插入)对象模型。