我正在寻找一个基于插件的应用程序框架,它与Eclipse插件框架相当,我的简单思想包括:
核心插件管理框架(Equinox/OSGI),它提供声明扩展端点,然后发现和加载为这些端点提供服务的插件的功能.(这比依赖注入不同,但不可否认的区别很微妙-配置是高度分散式,也有版本的关注,它可能涉及一个在线插件库,最重要的对我来说,它应该很容易为用户增加插件,无需了解底层架构/配置文件)
多层插件,提供基本工作台shell,包括并发支持,命令,首选项表,菜单,工具栏,键绑定等.
这只是RCP的表面,它本身就是你的应用程序的基础,你可以通过编写/组装更多的插件来构建它.
这是我在过去几天从互联网上收集的内容......
据我所知,.NET世界中没有任何东西可以远程接近Eclipse RCP for Java的健壮性和成熟度,但有几个竞争者可以很好地完成#1或#2.
(我还应该提到我还没有对WinForms vs WPF做出最终决定,所以我也试图了解任何候选框架中的UI耦合程度.我也想知道平台耦合和源代码许可)
我必须说开源的东西通常记录较少但更容易理解,而MS的东西通常有更多的文档,但是不太容易理解,因此对于许多MS技术,我不知道他们实际上做了什么. ,在实际意义上.
这些是我找到的库:
我看到的第一件事是SharpDevelop,它以基本的方式同时执行#1和#2(对SharpDevelop没有任何侮辱,这是令人钦佩的 - 我的意思是比Eclipse RCP 更基本).但是,SharpDevelop不仅仅是一个框架,它还有一些基本的假设和局限(即与WinForms有些结合).仍有一些关于CodeProject的文章解释了如何将它作为应用程序的基础.
似乎System.Addins旨在提供一个强大的加载项加载框架,其中包含一些复杂的选项,用于加载具有不同信任级别的程序集,甚至可以运行进程外的程序集.它似乎主要是基于代码的,而且代码很重,有许多程序集用于隔离版本问题.使用Guidance Automation生成大量代码.
到目前为止,我还没有发现很多System.AddIns文章,这些文章说明了它如何用于构建像Eclipse RCP这样的东西,很多人似乎都在为它的复杂性绞尽脑汁.
似乎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或基于清单的连线.到目前为止,我还没有找到很多文档,并且这些示例似乎有点"神奇",更像是基于属性的DI,尽管有人澄清MEF不是DI容器.
它的许可证刚刚开放,但确实引用了WindowsBase - 不确定这是否意味着它与Windows相连.
我不确定这是什么.它是MEF,还是还在发生什么?
WPF和Winforms Composite Application块似乎提供了更多的工作台框架.我对这些经验很少,但他们似乎依赖于指导自动化显然与UI层相结合.有一些将MEF与这些应用程序块组合在一起的例子.
我已尽力在这里回答我自己的问题,但我真的只是表面上看,而且我没有任何这些框架的经验.希望你们中的一些人可以添加更多关于你们经历过的框架的细节.如果我们最终得到某种比较矩阵会很棒.