MEF 在多大程度上(如果有的话)是 PRISM 的替代品?
4 回答
今天我想说 Prism 和 MEF 相得益彰。就像棱镜和团结一样。Prism 引入了一组特定的服务,例如 RegionManager、DelegateCommand 和 EventAggregator,它们有助于构建复合应用程序。另一方面,MEF 是一种更通用的组合机制,用于应用程序和框架的可扩展性,无论它们是否是组合的。MEF 的关键区别在于它的可发现性,这意味着它可以动态地发现所有可用的部分。
您可能有兴趣查看包含 Unity 和 MEF 集成层的 MEF contrib 项目 (mefcontrib.codeplex.com)。通过该扩展,Unity 在幕后管理 MEF,因此您无需与两个 contianers 竞争。优点是它允许您将 Unity 用于一般 Pocos,并使用 MEF 来发现扩展。因此,由于 Prism 当前是基于 Unity 构建的,因此您可以使用它来利用 MEF。要使用 contrib 项目,您必须对 Unity Bootstrapper 进行一些细微的更改,但这应该是相当简单的。
肯定有一些重叠。它最突出的地方是关于模块。Prism 使用 IModule 作为发现手段。在 MEF 中,任何组件都可以是一部分,并且可以动态发现。这意味着使用 MEF,您可以从上到下实现模块化,而使用 Prism,模块是更细粒度的单元。复合应用程序绝对是我们在 MEF 时间关注的一个领域。随着时间的推移,您很可能会看到越来越多的支持在 MEF 本身内构建这些类型的应用程序。我们正在与 p&p 合作,以确保在这种情况下顺利过渡。
编辑:不要阅读这个答案。这是令人尴尬的错误。我失败了。阅读下面的格伦布洛克。
这并不明显,但这是同一个问题: Managed Extensibility Framework (MEF) vs. Composite UI Application Block (CAB)
重复帖子中的共识是,MEF 和 Prism 以不同的方式提供相同的基本功能集,除了 Prism 提供了Event Aggregator,它是应用程序组件之间通信的发布-订阅方式。但是,您可以将它与 MEF 一起使用。这几乎取决于偏好,真的。
看看这个关于 MEF 和 Prism的Sparkling Client 播客。
MEF永远不会取代棱镜
MEF 是一个依赖注入管理器。它不是一个依赖注入容器。
MEF 提供了使用属性以声明方式分配导出和导入的能力。
带有 MEF 的 Prism 使您能够自动发现 dll 以及通过添加或删除 dll 来添加和删除插件的能力。prism 框架提供事件聚合器、区域管理器、服务定位器。
您可以在没有 MEF 的情况下使用棱镜。还有各种其他选项,例如 ninject、unity 和其他 DI 容器。
您可以将 MEF 与 prism 一起使用来构建基于插件的可扩展应用程序。