我正在寻找一个与 Eclipse 插件框架相当的基于插件的应用程序框架,在我看来,它包括:
- a core 插件管理框架(Equinox / OSGI),它提供了声明扩展端点,然后发现并加载为这些端点提供服务的插件的能力。 (这与依赖注入不同,但不可否认,区别是微妙的 - 配置高度分散,存在版本控制问题,它可能涉及在线插件存储库,最重要的是对我来说,它应该很容易user添加插件而不需要了解任何有关底层架构/配置文件的信息)
- 许多层插件提供了基本工作台外壳具有并发支持、命令、首选项表、菜单、工具栏、键绑定等。
这只是 RCP 的皮毛,它本身就是作为应用程序的基础,您可以通过编写/组装甚至more插件。
这是我这两天从网上搜集到的信息……
据我所知,.NET 世界中没有任何东西可以远远接近 Eclipse RCP for Java 的稳健性和成熟度,但有几个竞争者在#1 或#2 方面做得很好。
(我还应该提到,我还没有对 WinForms 与 WPF 做出最终决定,所以我也在尝试了解任何候选框架中的 UI 耦合程度。我还想知道平台耦合和源代码许可)
我必须说,开源的东西通常文档较少,但更容易理解,而 MS 的东西通常有更多文档,但不易访问,因此对于许多 MS 技术,我想知道它们实际上是做什么的,在实际意义上。
这些是我找到的库:
夏普开发
我首先看到的是 SharpDevelop,它以基本方式同时实现了 #1 和 #2(没有侮辱 SharpDevelop,这是令人钦佩的 - 我只是说更基本的比 Eclipse RCP)。然而,SharpDevelop 与其说是一个框架,不如说是一个应用程序,并且存在基本的假设和限制(即在某种程度上与 WinForms 耦合)。尽管如此,CodeProject 上还是有一些文章解释了如何使用它作为应用程序的基础。
系统插件
看来 System.Addins 旨在提供一个强大的加载项加载框架,并提供一些复杂的选项来加载具有不同信任级别的程序集,甚至运行进程外。它似乎主要是基于代码的,并且代码量很大,有很多程序集可以防止版本控制问题。使用指导自动化生成大量代码。
到目前为止,我还没有找到很多 System.AddIns 文章来说明如何使用它来构建 Eclipse RCP 之类的东西,而且许多人似乎对其复杂性感到绞尽脑汁。
Mono插件
Mono.Addins 似乎受到 System.Addins、SharpDevelop 和 MonoDevelop 的影响。它似乎提供了 System.Addins 的基础知识,具有不太复杂的插件加载选项,但更加简单,具有基于属性的注册、XML 清单和在线插件存储库的基础结构。
它有一个非常好的常见问题解答和文档,以及一组相当强大的示例,这些示例确实有助于描绘如何开发像 SharpDevelop 或 Eclipse 这样的架构。这些示例使用 GTK 作为 UI,但框架本身并未与 GTK 耦合。因此,它似乎很好地完成了#1(加载项加载),并为#2(工作台框架)指明了方向。看起来Mono.Addins是从MonoDevelop派生出来的,但我实际上并没有研究过MonoDevelop是否提供了一个很好的核心工作台框架。
托管可扩展性框架
这是目前每个人都在谈论的内容,它的作用正在慢慢变得清晰,但即使在阅读了几篇关于 SO 的文章之后,我仍然很模糊。官方说法是它“可以与 System.Addins 并存”。但是,它没有引用它,并且似乎重现了它的一些功能。那么,在我看来,它是 System.Addins 的一个更简单、更易于访问的替代方案。
它看起来更像 Mono.Addins,因为它提供基于属性的连接。它提供可以基于属性或基于目录的“目录”。它似乎没有提供任何 XML 或基于清单的连接。到目前为止,我还没有找到太多文档,尽管有说明 MEF 不是 DI 容器,但这些示例似乎有点“神奇”,更让人想起基于属性的 DI。
它的许可证刚刚开放,但它确实引用了 WindowsBase——不确定这是否意味着它与 Windows 耦合。
雅典卫城
我不确定这是什么。是MEF,还是即将推出的东西?
复合应用块
WPF 和 Winforms 复合应用程序块似乎提供了更多的工作台框架。我对这些方面的经验很少,但它们似乎在很大程度上依赖于指导自动化,并且显然与 UI 层相结合。有一些将 MEF 与这些应用程序块相结合的示例。
我已经尽我所能来回答我自己的问题,但我实际上只是触及了表面,而且我对这些框架都没有经验。希望你们中的一些人能够添加有关您使用过的框架的更多详细信息。如果我们最终能得到某种比较矩阵,那就太好了。