9

MEF 在多大程度上(如果有的话)是 PRISM 的替代品?

4

4 回答 4

37

今天我想说 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 合作,以确保在这种情况下顺利过渡。

于 2009-09-12T20:34:48.930 回答
8

编辑:不要阅读这个答案。这是令人尴尬的错误。我失败了。阅读下面的格伦布洛克。

这并不明显,但这是同一个问题: Managed Extensibility Framework (MEF) vs. Composite UI Application Block (CAB)

重复帖子中的共识是,MEF 和 Prism 以不同的方式提供相同的基本功能集,除了 Prism 提供了Event Aggregator,它是应用程序组件之间通信的发布-订阅方式。但是,您可以将它与 MEF 一起使用。这几乎取决于偏好,真的。

于 2009-08-24T21:30:19.163 回答
2

看看这个关于 MEF 和 Prism的Sparkling Client 播客。

于 2009-08-24T20:58:55.873 回答
0

MEF永远不会取代棱镜

MEF 是一个依赖注入管理器。它不是一个依赖注入容器。
MEF 提供了使用属性以声明方式分配导出和导入的能力。

带有 MEF 的 Prism 使您能够自动发现 dll 以及通过添加或删除 dll 来添加和删除插件的能力。prism 框架提供事件聚合器、区域管理器、服务定位器。

您可以在没有 MEF 的情况下使用棱镜。还有各种其他选项,例如 ninject、unity 和其他 DI 容器。

您可以将 MEF 与 prism 一起使用来构建基于插件的可扩展应用程序。

于 2016-09-01T02:13:22.083 回答