MEF在多大程度上取代PRISM?
答案 0 :(得分: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合作,以确保顺利过渡。
答案 1 :(得分:8)
编辑:请勿阅读此答案。这是令人尴尬的错误。我失败了。阅读下面的Glenn Block。
这不是很明显,但这是同一个问题: Managed Extensibility Framework (MEF) vs. Composite UI Application Block (CAB)
重复帖子中的共识是,MEF和Prism以不同的方式提供相同的基本功能集,除了Prism提供Event Aggregator,它是应用程序组件之间的pub-sub通信方式。但是,您可以将其与MEF一起使用。这真的非常依赖于偏好。
答案 2 :(得分:2)
在MEF和Prism上查看Sparkling Client podcast。
答案 3 :(得分:0)
MEF永远不会取代棱镜
MEF是依赖注入管理器。不是依赖注入容器 MEF提供了使用属性明确分配导出和导入的功能。
使用MEF的Prism使您能够通过添加或删除dll来自动发现dll以及添加和删除插件的能力。 棱镜框架提供事件聚合器,区域管理器,服务定位器。
您可以在没有MEF的情况下使用棱镜。还有其他各种选项,如ninject,unity和其他DI容器。
您可以将MEF与prism一起用于构建基于插件的可扩展应用程序。