WPF入门到跪下 第十一章 Prism(一)初始化启动

官网:https://primslibrary.com
源码地址:https://guthub.com/PrismLibrary/prism
Prism最初是由微软开发的,旨在帮助开发人员创建可维护和可扩展的WPF(Windows Presentation Foundation)应用程序。随着时间的推移,Prism的开发和维护转移到了社区,成为一个开源项目。提供了一组设计模式的实现,有助于编写结构良好的且可维护的XAML应用程序,包括MVVM、依赖注入、命令、事件聚合器等。
关键程序集
Prism.Core:实现MVVM的核心功能,是一个与平台无关的项目,可以在多个开发平台中使用(Prism.dll)。

  • 如果只需要实现MVVM中的一些简单功能、例如属性变化通知、命令等,只需要在Nuget中安装Prism.Core库即可。在这里插入图片描述

Prism.Wpf:包含了DialogServiceRegionModuleNavigation和其他一些WPF功能,使得WPF开发更加方便快捷(Prism.Wpf.dll)。

  • 如果需要进一步使用WPF中的一些其他功能,可以在Nuget中安装Prism.Wpf库,由于Prism.Wpf依赖于Prism.Core因此,无需再安装Prism.Core
    在这里插入图片描述

Prism.Unity:包含Prism.Unity.Wpf.dllPrism.DryIoc.Wpf.dll

  • 如果需要使用IOC,则需要安装Prism.Unity,由于Prism.Unity依赖于Prism.Wpf,因此安装Prism.Unity后不需要再安装Prism.WpfPrism.Core

    在这里插入图片描述正常情况下,我们在Prism框架中都会使用IOC容器,直接在Nuget中下载Prism.Unity依赖库即可。

初始化

Prism框架项目的初始化,可以使用两种启动器类型来进行,分别是PrismBootstrapperPrismApplication

一、PrismBootstrapper

使用PrismBootstrapper来进行WPF项目的初始化,需要通过PrismBootstrapper对象来进行项目的启动。
PrismBootstrapper进行项目的启动,主要是为了通过PrismBootstrapper对象来进行项目IOC容器的初始化,为后续IOC容器管理对象做基础。
要通过PrismBootstrapper来启动项目,首先要创建一个PrismBootstrapper的子类,并实现两个方法成员:

  • DependencyObject CreateShell():进行主窗口对象的创建。
    • 主窗口对象需要通过Container.Resolve<MainWindow>()来创建。
  • void RegisterTypes(IContainerRegistry containerRegistry):这个函数主要用于进行IOC容器管理类型的注册。

最终在App后台代码中调用PrismBootstrapper对象的Run()方法来启动项目

  • Run()PrismBootstrapperBase的实例方法,用于初始化、启动IOC容器、展示窗口等操作。

启动步骤如下

创建启动类

public class Bootstrapper : PrismBootstrapper
{
    protected override DependencyObject CreateShell()
    {
        //创建并返回一个主窗口对象
        return Container.Resolve<MainWindow>();
    }

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
        //这个函数中进行一些类型注册
    }
}

消除App.xaml的启动属性

<Application x:Class="Command.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Command">
						 <!--这里消除掉了原有的 StartupUri="MainWindow.xaml" 属性-->
    <Application.Resources>
    </Application.Resources>
</Application>

在App后台代码中通过PrismBootstrapper来启动项目

public partial class App : Application
{
    public App()
    {
        new Bootstrapper().Run();
    }
}

二、PrismApplication

使用PrismApplication来进行项目启动,在步骤上会相对简单一些,具体如下:

修改App.xaml
将顶级元素Application修改为prism:PrismApplication
去除启动属性StartupUri="MainWindow.xaml”

<prism:PrismApplication x:Class="Command.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Command"
             xmlns:prism="http://prismlibrary.com/">
    <Application.Resources>
         
    </Application.Resources>
</prism:PrismApplication>

修改App后台代码
继承PrismApplication类并实现CreateShellRegisterTypes两个方法,其用法跟上文中的PrismBootstrapper是一样的。
有一点需要注意,App类型在继承了PrismApplication类后可能会提示错误,但是没有提示要实现方法,此时重新生成一下代码就会由提示了。

public partial class App : PrismApplication
{
    protected override Window CreateShell()
    {
        //创建主窗口对象
        return Container.Resolve<MainWindow>();
    }

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
        //这里进行IOC容器管理类型的注册
    }
}

PS:此后的章节中,都以PrismApplication启动作为基础进行学习。

三、基于Prism框架的登录跳转

在进行桌面应用开发时,从登录窗口跳转到主窗口的操作极为常见的,在Prism框架下,登录跳转的具体操作可以通过重写InitializeShell方法来实现(这里以PrismApplication启动为例)。
InitializeShell(Window shell)PrismApplication类型的实例方法,在初始化Shell(主窗口)的时候执行。

public partial class App : PrismApplication
{
    ......
    protected override void InitializeShell(Window shell)
    {
        //通过IOC容器来创建登录窗口
        var login = Container.Resolve<Login>();
        if (login == null || login.ShowDialog() == false)
        {
            //当登录失败或登录窗口关闭,则直接关闭应用
            Application.Current.Shutdown();
        }
		else
		{
				base.InitializeShell(shell);
		}
				
    }
}

这里的Login为登录窗口,中间有一个按钮,点击后将登录窗口的DialogResult属性设置为true并关闭登录窗口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SchuylerEX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值