【问题标题】:How to Develop Dynamic Plug-In Based Functionality in C#如何在 C# 中开发基于动态插件的功能
【发布时间】:2011-02-26 08:26:31
【问题描述】:

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

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

您如何开发应用程序以便可以部署插件,这样您就可以让一位客户在 TreeView 中看到一个新品牌,比如本田,还可以扩展汽车上下文菜单,以便他们现在可以“给汽车涂漆?

在 Eclipse/RCP 开发中,这很容易通过扩展点和插件来处理。 C#如何处理它?我一直在研究开发自己的插件架构并阅读 MEF。

【问题讨论】:

    标签: c# dynamic plugins extensibility menu


    【解决方案1】:

    MEF 将是一个不错的起点。

    Glenn Block 的文章 Managed Extensibility Framework: Building Composable Apps in .NET 4 with the Managed Extensibility Framework 提供了很好的概述。

    顺便说一句,不要被标题所迷惑 - 您还可以获得适用于 .NET 3.5 SP1 的 MEF。

    【讨论】:

    • 我看过一些 MEF 视频,这些视频展示了加载程序集、分类日志和容器的使用,但是我还没有完全理解 MEF 如何允许您部署修改主菜单的插件或给定控件的上下文菜单。我想我错过了视频所描绘的最后一跳,并允许我的应用程序响应插件的存在,即例如,在主菜单中添加一个新的菜单按钮。
    • 如果您使用 MVVM (msdn.microsoft.com/en-us/magazine/dd419663.aspx),这应该会更容易弄清楚。这将使您能够将 Menus 和 MenuItems 绑定到底层(可插入)对象模型。
    【解决方案2】:

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

    如果您关心隔离插件,您应该阅读 AppDomains。我有一个演示项目,用于帮助学习如何处理isolating assemblies within an AppDomain here,您可能会觉得这很有趣。关于隔离的小知识:只有你的类型应该跨越边界并且这些类型应该被密封,从跨域事件处理中运行尖叫,并且插件不应该扩展 MarshallByRefObject。

    【讨论】:

      猜你喜欢
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 2017-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多