MEF与PRISM。有何不同?未来将支持哪些内容?

18

我想创建的是一个银光应用程序,具有几个选项卡/模块,这些都将是单独的DLL。

我看到PRISM具有Shell / Module概念,似乎是针对UI设计的,并找到了一个不错的演示(展示如何搜索digg / twitter)。

但听起来MEF将包含在VS2010中,因此我想选择该选项。

有人能够清楚地解释这些差异吗?(我不是高级程序员)

4个回答

23

MEF和Prism有两个非常不同的目标。

Prism基本上是一个设计复合应用程序的指南——其中您拥有一个外壳和动态分配、集成的“区域”。它包括一个IoC容器(Unity),用于注入。

MEF是一个依赖项注入框架,其主要目标是在运行时为应用程序“填充”依赖项。在这方面,它正在完成Prism中Unity的相同目标(实际上,您可以相当容易地重新设计Prism以使用MEF代替Unity)。

在某些方面,Prism填补了更广泛的范围,但也受到GUI应用程序的限制。MEF只做一件事情(依赖项注入),但旨在成为任何类型应用程序的通用目的。


至于这些产品的生命周期-这里没有答案,但它们的开发方式如下:

Prism由Patterns and Practices团队开发。目标并不一定是制作软件,而是提供指导。因此,他们会更新(尽管不是很频繁)Prism库和示例,但Prism不是由Microsoft提供的框架的核心部分。它实际上是第三方库(即使微软资助了很多,大多数P&P人员不是微软全职员工)。

根据博客文章,MEF似乎计划集成到框架中,并直接用于MS项目。因此,它正在直接得到来自Microsoft的重点开发,并在他们的产品中使用。

我个人已经阅读了Prism文档(并有这本书),并且已经浏览了示例。它非常有助于了解如何拆分应用程序,但它确实只是指导,而不是一个完整的、可用的框架。这些示例非常擅长完成它们设计完成的任务——教育架构师如何设计复合应用程序。

如果您的目标仅是在Silverlight应用程序中保持清晰的责任分离,那么我会更关注学习MVVM,而不仅仅是使用Prism。

如果你想使用MEF,还有其他不错的选择。例如,WPF 应用程序框架是一个完整的MVVM框架,构建在使用MEF的基础之上,并且非常好用。

1
在这里有一些混合的问题... Prism 的核心服务与 MVVM 关系不大... 指导包推动 MVVM/MVP,但是 Prism "The Bits" 不能被总结为一个 MVVM 框架。 - Anderson Imes
是的,我同意。 我之前提出,在 OP 想要构建一个“分成几个部分”的应用程序时,着眼于 MVVM 可能比必须关注 Prism 更好。 我没有试图暗示 Prism 是一个 MVVM 框架。 - Reed Copsey
考虑到你在这里的声誉,我也是这么想的,只是听起来像那样。你的编辑很好地澄清了事情。 :) - Anderson Imes
我想学习MVVM和Prism,并且理解整个DI基础知识,因为我不是高级程序员。所以对我来说,我们下一个小型企业应用程序将使用Prism。这应该是有教育意义的。 - punkouter

6
基本上,MEF是一个通用的可扩展性框架:
如果您正在构建可扩展的应用程序、可扩展的框架和应用程序扩展,那么MEF适合您。
而Prism主要用于构建GUI:
组合客户端应用程序指南旨在帮助您更轻松地构建模块化的Windows Presentation Foundation (WPF)和Silverlight客户端应用程序。

6

所以MEF和Unity基本上是一样的...

嗯,并不完全相同。MEF更专注于在编译时未知的扩展,而IOC容器通常专注于在编译时已知的依赖项。 这个问题的最佳答案给出了这些差异的很好解释。


2
在Unity中,您可以在执行期间提供要运行的扩展。相比之下,MEF中的扩展不一定由您的应用程序提供,但是它们是可发现的,并且在可用时可以自动包含。 - Doug


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