6

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

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

您如何开发应用程序以便可以部署插件,以便您可以允许一位客户在 TreeView 中看到一个新品牌,比如本田,还可以扩展汽车上下文菜单,以便他们现在可以“画一辆汽车” '?

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

4

2 回答 2

10

MEF将是一个很好的起点。

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

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

于 2010-06-01T12:58:31.980 回答
1

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

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

于 2010-06-01T13:07:11.240 回答