WPF入门到跪下 第十一章 Prism(三)初始化启动 | 您所在的位置:网站首页 › 主窗口初始化失败 › WPF入门到跪下 第十一章 Prism(三)初始化启动 |
初始化
Prism框架项目的初始化,可以使用两种启动器类型来进行,分别是PrismBootstrapper和PrismApplication。 一、PrismBootstrapper使用PrismBootstrapper来进行WPF项目的初始化,需要通过PrismBootstrapper对象来进行项目的启动。 PrismBootstrapper进行项目的启动,主要是为了通过PrismBootstrapper对象来进行项目IOC容器的初始化,为后续IOC容器管理对象做基础。 要通过PrismBootstrapper来启动项目,首先要创建一个PrismBootstrapper的子类,并实现两个方法成员: DependencyObject CreateShell():进行主窗口对象的创建。 主窗口对象需要通过Container.Resolve()来创建。 void RegisterTypes(IContainerRegistry containerRegistry):这个函数主要用于进行IOC容器管理类型的注册。最终在App后台代码中调用PrismBootstrapper对象的Run()方法来启动项目 Run():PrismBootstrapperBase的实例方法,用于初始化、启动IOC容器、展示窗口等操作。 启动步骤如下创建启动类 public class Bootstrapper : PrismBootstrapper { protected override DependencyObject CreateShell() { //创建并返回一个主窗口对象 return Container.Resolve(); } protected override void RegisterTypes(IContainerRegistry containerRegistry) { //这个函数中进行一些类型注册 } }消除App.xaml的启动属性 在App后台代码中通过PrismBootstrapper来启动项目 public partial class App : Application { public App() { new Bootstrapper().Run(); } } 二、PrismApplication使用PrismApplication来进行项目启动,在步骤上会相对简单一些,具体如下: 修改App.xaml 将顶级元素Application修改为prism:PrismApplication。 去除启动属性StartupUri="MainWindow.xaml”。 修改App后台代码 继承PrismApplication类并实现CreateShell和RegisterTypes两个方法,其用法跟上文中的PrismBootstrapper是一样的。 有一点需要注意,App类型在继承了PrismApplication类后可能会提示错误,但是没有提示要实现方法,此时重新生成一下代码就会由提示了。 public partial class App : PrismApplication { protected override Window CreateShell() { //创建主窗口对象 return Container.Resolve(); } 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(); if (login == null || login.ShowDialog() == false) { //当登录失败或登录窗口关闭,则直接关闭应用 Application.Current.Shutdown(); } else { base.InitializeShell(shell); } } }这里的Login为登录窗口,中间有一个按钮,点击后将登录窗口的DialogResult属性设置为true并关闭登录窗口。 |
CopyRight 2018-2019 实验室设备网 版权所有 |