MEF:PRISM的替代品?

9
MEF是否可以完全替代PRISM?
4个回答

37
今天我要说的是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合作,以确保在发生这种情况时,有一个平稳的过渡。

请记住,Prism 中的 MEF 支持即将结束:“MEF 在 WPF 中受支持,以实现与之前版本的兼容性。它将不会添加到 Windows 10 UWP 或 Xamarin Forms。” - Informagic

8
编辑:请勿阅读此答案,内容错误且令人尴尬。我失败了。请阅读下面的Glenn Block的回答。 这其实是同一个问题:Managed Extensibility Framework (MEF) vs. Composite UI Application Block (CAB) 在重复的帖子中,共识是MEF和Prism以不同的方式提供相同的基本功能,除了Prism提供事件聚合器,这是应用程序组件之间的发布-订阅通信手段。但您也可以将其与MEF一起使用。这其实很大程度上取决于个人喜好。

5
唉,我知道这是一年前的回答,而且我已经学到了很多,但这个答案真的是错误的。Glenn Block的帖子更加准确。你可以在Prism V4中看到最明显的是有一个选项来 使用 MEF 进行各种形式的IoC和组合。我无法删除或甚至是对自己的帖子进行投票。 - Anderson Imes
6
阅读某些东西时感到奇怪,说出“这是谁啊傻逼?……哦” - Anderson Imes
3
纯粹的诚实得到了加分。尽管你的答案不是“最正确”的,但与格伦的答案形成对比,它提供了一些见解。MEF / Prism / Unity / MAF之间的责任/功能线条相当模糊(你也不应该被投反对票)。 - Doug

2

0

MEF永远不会取代Prism。

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

Prism与MEF一起,可以自动发现DLL并通过添加或删除DLL来添加和删除插件。而Prism框架则提供事件聚合器、区域管理器和服务定位器等功能。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接