MEF与PRISM。有什么不同?将来会支持什么?

时间:2009-10-20 15:19:37

标签: prism mef

我想要创建的是一个Silverlight应用程序,其中包含一些选项卡/模块,这些选项卡/模块都将是单独的DLL。

我看到PRISM有Shell / Module概念,似乎是针对UI做的,我找到了一个很好的演示(展示如何搜索digg / twitter)。

但听起来MEF将包含在VS2010中,所以我想选择这个选项。

任何人都可以清楚地解释这些差异吗? (我不是高级程序员)

4 个答案:

答案 0 :(得分:23)

MEF和棱镜有两个截然不同的目标。

Prism基本上是设计复合应用程序的指导 - 你有一个shell和动态分配和集成的“区域”。它包括一个用于注入的IoC容器(Unity)。

MEF是一个依赖注入框架 - 它的主要目标是在运行时为应用程序“填充”依赖关系。在这方面,它正在完成与Unity在Prism中所做的相同的目标(事实上,你可以很容易地将Prism改为使用MEF而不是Unity)。

Prism在某些方面填补了更广泛的范围,但也非常局限于GUI应用程序。 MEF正在做一件事(Dep。注射),但是对于任何类型的应用来说都是更通用的。


至于这些产品的使用寿命 - 这里没有答案,但这就是它们的开发方式:

Prism由模式与实践团队开发。目标不是制作软件,而是提供指导。因此,他们更新(虽然有点不常见)Prism库和样本,但Prism不是Microsoft提供的框架的核心部分。这真的是第三方图书馆(尽管MS资助了很多,P& P大多数人都不是MS FTE)。

来自博客文章的MEF听起来似乎计划集成到框架中,并直接在MS项目中使用。因此,它正在直接从微软开始大量开发,并在其产品中使用。

我个人已经阅读了Prism文档(并有书),并且已经完成了样本。了解如何拆分应用程序非常有帮助,但它确实不仅仅是一个完整的,可用的框架。这些样本非常擅长做他们想做的事情 - 教会架构师如何设计复合应用程序。

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

如果您想使用MEF,还有其他不错的选择。例如,WPF Application Framework是一个完整的MVVM框架,它建立在使用MEF之上,非常好。

答案 1 :(得分:4)

基本上,MEF是一个通用的可扩展性框架:

  

如果您正在构建可扩展的应用程序,可扩展的框架和应用程序扩展,那么MEF适合您。

而Prism主要用于构建GUI:

  

Composite Client Application Guidance旨在帮助您更轻松地构建模块化Windows Presentation Foundation(WPF)和Silverlight客户端应用程序。

答案 2 :(得分:4)

  

所以MEF和Unity基本相同......

嗯,不完全是。 MEF更侧重于在编译时未知的扩展,而IOC容器通常关注在编译时已知的依赖性。 this question的最佳答案给出了差异的一个很好的解释。

答案 3 :(得分:2)