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