WPF 的棱镜是啥?

Posted

技术标签:

【中文标题】WPF 的棱镜是啥?【英文标题】:What is Prism for WPF?WPF 的棱镜是什么? 【发布时间】:2011-09-10 12:42:09 【问题描述】:

我最近经常遇到一种叫做Prism 的东西。运行该项目的微软将其描述为

WPF 和 Silverlight 中的复合应用程序指南。

即使在阅读了更详细的描述之后,恐怕我也几乎不知道它实际上是关于什么的。

我在这里希望有人能给我一个清晰简洁的解释,说明 Prism 究竟是什么以及我为什么要学习它。我已经是 WPF 开发人员几年了,我使用过 MVVM,并且最近遇到了使用 Prism 的人,但我个人觉得这里有点脱节。

我特别想知道以下几点:

正如on the MSDN site 所给出的那样,Prism 真的只是(或主要是)一本小册子吗?它是否包含任何库,如果包含,具体是为了什么?

Prism 是 MVVM 框架吗?我应该将它用作“官方 Microsoft MVVM 框架”而不是其他人还是我自己的?

它是否提供依赖注入?它与MEF有这种关系吗?

作为 WPF/Silverlight 开发人员,我还应该了解 Prism 的其他功能。

【问题讨论】:

这实际上也是一件相当复杂的事情 - Prism 试图满足很多需求,因此如果你想弄清楚它的用途,很难得到一个“正确”的答案。它确实可以做很多事情。 我提出的这个类似问题也对这个问题有一些很好的答案 - ***.com/questions/6251821/… 又是一个来自 P&P 的阴暗泥潭。每次他们发布这样的东西时,我都会发现自己不得不去 SO 或***去了解它到底是什么。为什么总是这么神秘? 如果您愿意,它是一种指导您如何在 WPF/Silverlight 应用程序中实现 MVVM 模式的文档。还有一个来自 codePlex 的库,我不确定它到底是做什么用的。有关 PRISM 的好文档位于以下链接中,值得一看:Prism 4.1 - Developer's Guide to Microsoft Prism - MSDN 【参考方案1】:

Github home page 回答了关于什么是 Prism 的更现代的答案。

Prism 是一个框架,用于构建松散耦合、可维护和 WPF、Xamarin Forms、Uno Platform 和 WinUI。

详细地说,Prism 是一个库集合,可帮助按照 Microsoft 推荐的最佳实践设计和架构模式实施企业应用程序。

Prism 由以下 Nuget 包组成:

Prism.Core Prism.Wpf Prism.Forms 棱镜.Uno

Prism 支持不同的 DI(依赖反转)/IoC(控制反转)技术和库。它附带用于依赖注入的 Unity 库,以及额外的 IoC 辅助函数和类。

图书馆涉及的一些领域:

分离的事件消息传递和处理 命令 查看模型导航 INotifyPropertyChanged 实现 依赖注入

Prism 是 .NET 基金会的一部分。

您可能有兴趣查看 Windows 社区工具包,它遵循 Prism 采用的许多相同原则和模式。

【讨论】:

【参考方案2】:

Prism 是Microsoft Patterns and Practices Team 在 WPF 和 Silverlight 中构建“复合应用程序”的官方指南。

它旨在为构建在开发和可维护性方面灵活的大型应用程序的最佳实践提供指导。

这包括依赖注入(通过 Unity 或 MEF)、布局(包括使用 MVVM)、复合事件处理等方面的指导。


Prism 真的只是(或主要是)一本 MSDN 网站上给出的小册子吗?它是否包含任何库,如果包含,具体是为了什么?

这是一本书,但还包括支持库(在GitHub 网站上)。

Prism 是 MVVM 框架吗?我应该将它用作“官方 Microsoft MVVM 框架”而不是其他人还是我自己的?

是的,不是的。它包括使用 MVVM 的指南,但不仅仅是 MVVM 框架。它本身并不是一个“MVVM 框架”——尽管它确实包含 MVVM 指南。

它是否提供依赖注入?它与MEF有这种关系吗?

是的。它最初包含 Unity,但最新版本包含将 MEF 用于 DI。

作为 WPF/Silverlight 开发人员,我还应该了解 Prism 的其他功能。

值得看看他们是如何做事的。他们有一个非常精细的“区域”概念,以及良好的事件聚合支持。它还包括同时针对 WPF、Silverlight 和 Windows Phone 进行开发的良好实践。

【讨论】:

感谢您的回复。我认为这给了我一个很好的概述。只是要明确一点:实际上是否有任何与 MVVM 相关的代码或库 DLL? @Noldorin:我假设您询问的是 Prism 内部... 对 MVVM 有一些支持,但坦率地说,作为一种模式,MVVM 几乎不需要库支持。 Prism 确实具有良好的通知对象和强大的支持,这是 MVVM 真正需要的 BCL 中唯一缺少的东西。它还具有服务定位器支持,如果您想使用 DI/共享服务进行 VMVM 通信,这将很有帮助。它没有一些 MVVM “框架”提供的“额外”东西,例如消息传递框架等。 为了遵循 Prism 指南,是否必须安装库?【参考方案3】:

它是用于构建 WPF 和 Silverlight 应用程序的框架。

http://compositewpf.codeplex.com/

在微软将其重命名为“CompositeWPF”之前,它曾被称为“Prism”。

答案:

1) Prism 是一个 MVVM 框架,可用作应用程序的基础

2) 我建议根据您的具体要求。您应该发布另一个包含具体细节的问题,以便获得一些具体的答案。

3) Prism 使用依赖注入 (Unity) 但不“提供”它

4) Imo,Prism 提供了很多功能,但学习曲线很重。对于您作为唯一开发人员的小型项目,您可能不需要它提供的抽象和工具。

【讨论】:

我有点不同意你的说法 #1 - Prism 包含 MVVM 指导,但很多指导(大多数样本)根本不是 MVVM。它更多地作为一种可用于构建复合应用程序的选项。 我想我一直使用 MVVM 模式

以上是关于WPF 的棱镜是啥?的主要内容,如果未能解决你的问题,请参考以下文章

命令绑定在带有棱镜的 WPF 中不起作用

如何在 MVVM 模式中从页面导航到 WPF 中的页面?没有棱镜的概念[重复]

WPF到底是啥?

棱镜使用发现的服务

wpf是啥

c# wpf是啥