我要创建的是一个 Silverlight 应用程序,其中包含几个选项卡/模块,这些选项卡/模块都是单独的 DLL。
我看到 PRISM 具有似乎针对 UI 的 Shell/Module 概念,并且我找到了一个不错的演示(显示如何搜索 digg/twitter)。
但听起来 MEF 将包含在 VS2010 中,所以我想选择那个选项。
谁能以某种方式清楚地解释这些差异?(我不是高级程序员)
MEF 和 Prism 服务于两个截然不同的目标。
Prism 基本上是设计复合应用程序的指南 - 您有一个外壳和动态分配和集成的“区域”。它包括一个用于注入的 IoC 容器(Unity)。
MEF 是一个依赖注入框架——它的主要目标是在运行时为应用程序“填充”依赖关系。在这方面,它与 Unity 在 Prism 中实现的目标相同(事实上,您可以很容易地重新设计 Prism 以使用 MEF 而不是 Unity)。
Prism 在某些方面填补了更广泛的范围,但实际上也仅限于 GUI 应用程序。MEF 只做一件事(Dep. Injection),但更适用于任何类型的应用程序。
至于这些产品的生命周期——这里没有答案,但这就是它们的开发方式:
Prism 由 Patterns and Practices 团队开发。目标不一定是制作软件,而是提供指导。因此,他们会更新(尽管不经常)Prism 库和示例,但 Prism 并不是 Microsoft 提供的框架的核心部分。它实际上是一个第三方库(尽管 MS 为它提供了很多资金,但大多数 P&P 人员都不是 MS FTE)。
从博文来看,MEF 听起来像是计划集成到框架中,并直接在 MS 项目中使用。因此,它直接从微软得到大量开发,并被用于他们的产品中。
我个人已经阅读了 Prism 文档(并拥有这本书),并浏览了示例。了解如何拆分应用程序非常有帮助,但它确实是一种指导,而不仅仅是一个完整、可用的框架。这些示例非常擅长完成它们的设计目标——教育架构师如何设计复合应用程序。
如果您的目标是在silverlight 应用程序中保持关注点的清晰分离,我将更多地关注学习MVVM,而不是仅仅使用Prism。
如果您想使用 MEF,还有其他不错的选择。例如,WPF 应用程序框架是一个使用 MEF 构建的完整的 MVVM 框架,并且相当不错。
基本上,MEF 是一个通用的可扩展性框架:
如果您正在构建可扩展应用程序、可扩展框架和应用程序扩展,那么 MEF 适合您。
而 Prism 主要用于构建 GUI:
复合客户端应用程序指南旨在帮助您更轻松地构建模块化 Windows Presentation Foundation (WPF) 和 Silverlight 客户端应用程序。
所以MEF和Unity基本一样……
嗯,不完全是。MEF 更侧重于在编译时未知的扩展,而 IOC 容器通常侧重于在编译时已知的依赖项。这个问题的最佳答案很好地解释了这些差异。
是的。查看这两个帖子了解更多信息:
http://blogs.msdn.com/gblock/archive/2009/12/02/mef-and-prism-to-be-or-not-to-be.aspx http://blogs.msdn.com/dphill /archive/2009/12/09/prism-and-mef.aspx