Prism(一)
简介
原博客地址:https://www.cnblogs.com/zh7791/category/1893907.html
1.什么是Prism?
Prism是一个用于在 WPF、Xamarin Form、Uno 平台和 WinUI 中构建松散耦合、可维护和可测试的 XAML 应用程序框架。
2.Prism历史
他最初由Microsoft Patterns & Practices 团队构建的项目, 目的是帮助WPF开发人员以简化编写、维护和扩展来设计应用程序。
目前它是属于.NET基金会下的一个开源项目。并且经过财富100强等公司的多年的实践考验。
3.Github
https://github.com/PrismLibrary/Prism
4.NuGet
https://www.nuget.org/packages/Prism.Wpf
Core Packages
- Prism.Core
- Prism.Wpf
 Container Specific Packages
- Prism.DryIoc
- Prism.Unity
- Prism.Ninject
5.Visual Studio Extensions
基于Prism的VisualStudio扩展包模板: Prism Template Pack

6.具备哪些功能?
框架中包括 MVVM、依赖注入、Command、Message Event、导航、弹窗等功能。
本质是实现某种功能的类库
创建Prism应用程序
- 第一步
 首先, 创建一个基于.NetFramework 或.NetCore的WPF应用程序。如下所示:
 ![image]() 
- 第二步
 为当前应用程序添加NuGet源, 打开NuGet管理器,安装Prism.DryIoc, 如下所示:
 ![image]() 
说明:
本文将以DryIoc容器为主讲解本系列的所有内容。
实际上, 在Prism7.2版本中, 已经引入了一些围绕IOC抽象的API更改。这最终将使得在选择容器之间切换更加容易,因为 API 在如何注册服务和视图方面完全相同。
您仍然可以访问容器,在 Autofac 容器构建器的情况下,通过扩展方法,以便您可以完成更复杂的注册。
// Prism 6.X way of Registering Services
protected override void RegisterTypes()
{
    // Container Specific Registrations
    // Autofac
    Builder.RegisterType<DebugLogger>().As<ILoggerFacade>().SingleInstance();
    // DryIoc
    Container.Register<ILoggerFacade, DebugLogger>(reuse: Reuse.Singleton,
                                                   ifAlreadyRegistered: IfAlreadyRegistered.Replace);
    // Ninject
    Container.Bind<ILoggerFacade>().To<DebugLogger>().InSingletonScope();
    // Unity
    Container.RegisterType<ILoggerFacade, MCAnalyticsLogger>(new ContainerControlledLifetimeManager());
}
// Unified API in Prism 7
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
    containerRegistry.RegisterSingleton<ILoggerFacade, DebugLogger>();
}
在Prism提供的VusualStudio Template Pack当中, 默认支持选择两种类型的容器项目:
1.DryIoc: GitHub地址
2.Unity: GitHub地址
- 第三步
 修改App.xaml文件,添加prism命名空间, 继承由Application->PrismApplication, 如下所示:
 ![image]() 
 ![image]() 
 打开App.xaml.cs文件, 继承由Application->PrismApplication, 如下所示:
 注: 此时,继承于PrismApplication类, 需要实现其中的两个抽象方法。 CreateShell 与 RegisterTypes
 ![image]() 
1.Prism的初始化过程
在上面过程中, 我们已经将普通的WPF应用程序修改为PrismApplication, 此时, 再来了解一下Prism的整个框架的初始化过程, 如下所示:

到目前为止, 我们并不关心内部的运行逻辑及初始化过程, 从上面的图中, 可以大致了解, Prism在初始化过程中,
除了构建自身的容器、服务、适配器及一些区域行为后, 便开始创建应用程序的首页(Shell)以及加载模块, 最终呈现。
注: 关于涉及到的服务、注册类型、适配器、区域等概念, 再后面会陆续讲解。
了解了上面的初始化流程之后, 我们有了初步的概念, 再次回到第三步当中,App.xaml.cs文件。
在这里, 我们实现了其中的两个抽象方法:
- 1.CreateShell
 该方法返回了一个Window类型的窗口, 其实就是返回应用程序的主窗口。
- 2.RegisterTypes
 该方法用于在Prism初始化过程中, 我们定义自身需要的一些注册类型, 以便于在Prism中可以使用。
2. 创建Shell示例
现在, 创建一个ShellWindow, 并且实现CreateShell将SheloWindow实例返回, 如下所示:

注:Container 是基类当中的一个容器属性,可用于解析对象的依赖项注入容器
启动之后, 我们可以ShellWindow创建定义的内容,并且呈现。

3. 创建Prism的快速方法
1.首先, 打开VisualStudio的扩展, 安装Prism Template Pack包。
- Prism Template Pack提供了什么?
- Blank Project (空白示例项目)
- Module Project (模块示例项目)
- 代码片段(用户快速创建属性,命令)
- 3.1. propp – property (depends on BindableBase)
- 3.2. cmd - DelegateCommand
- 3.3. cmdg – DelegateCommand
 
2.安装完成之后, 再次打开VisualStudio, 将会发生,Prism Template Pack提供了多种项目模板, 用于快速构建基于Prism的应用程序, 如下所示:

注:同时,Prism提供了基于Xamarin的项目模板, 因为Prism是一个基于多个平台的框架, 详细见: Prism框架介绍
 
                    
                

 





 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号