Skip to content

Files

Latest commit

03035da · Jan 9, 2022

History

History
206 lines (129 loc) · 9.5 KB

03.md

File metadata and controls

206 lines (129 loc) · 9.5 KB

三、Prism 4 启动过程

构建 Hello World 解决方案

我们将从构建最简单的解决方案开始探索微软 WPF 和 Prism 4。我们的目标是创建一个显示以下外壳形式的解决方案。

Hello World Form.png

图 6:你好世界外壳表单

创建 Hello World 解决方案

第一步是创建一个包含我们项目的解决方案。运行 Visual Studio,从 Visual Studio 主菜单中选择文件 - 新建 - 项目,创建一个空白解决方案。空白解决方案位于 Visual Studio 解决方案下新建项目对话框的其他项目类型文件夹中。命名解决方案 HELLO_WORLD 。把它放在你选择的文件夹里。

创建主项目

接下来,我们将为该解决方案创建一个 WPF 项目。从 Visual Studio 主菜单中选择文件 - 添加 - 新项目,创建一个 C# WPF 应用程序。将其命名为 HELLO_WORLD。主

我们现在有一个可以运行的 WPF 解决方案。如果愿意,在 Visual Studio 中点击开始,会出现一个空白表单。

如果我们看一下由 Visual Studio 生成的文件,我们会看到有一个 MainWindow.xaml 文件和一个 App.xaml 文件。展开 App.xaml 文件,您将看到一个 App.xaml.cs 文件。还有一个参考文件夹。这些是我们将在此解决方案中关注的文件和文件夹。

参考 Prism 4 库

在我们利用这个框架之前,有必要参考一下微软的 Prism 4 库。右键单击项目中的参考文件夹,选择添加参考。浏览到计算机上 Prism 4 DLLs 所在的文件夹。添加以下突出显示的动态链接库:

Main Project DLL References Selected.png

图 7:你好世界。主要项目参考

| | 提示:您可以在下载的 Prism 4 框架库的 Bin\Desktop 文件夹中找到 Microsoft Prism 4 的 DLL 文件。log4net DLL 可以通过 NuGet 下载。 |

我们现在有必要的库来使用 Prism 4。

微软 Prism 4 启动过程

正如我们之前看到的,启动 WPF 解决方案很容易。只需添加项目并运行它。有了 Prism 4,启动过程就不同了。让我们首先看一下用于启动 WPF 解决方案的标记。

清单 1:应用程序 xaml 文件标记

      <Application    
          x:Class="HELLO_WORLD.MAIN.App"

          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

          StartupUri="MainWindow.xaml">

          <Application.Resources>

          </Application.Resources>

      </Application>

在清单 1 中,标记使用StartupUri属性将启动表单设置为主窗口. xaml 文件。虽然这是一种快速简单的启动解决方案的方式,但它严重限制了我们对启动过程的控制。为了解决这个问题,我们将首先从 App.xaml 文件中删除StartupUri属性。这是应该删除的标记:StartupUri="MainWindow.xaml" **。**现在移除标记。

| | 提示:StartupUri属性末尾有一个右括号(>)。请确保只移除属性,而不移除右括号。否则将导致异常。 |

Prism 4 自举类

我们创建 Hello World 项目的下一步是创建一个 Bootstrapper 类。此类用于启动 Prism 4 解决方案。正如您将在后面看到的,这个类让我们几乎可以无限制地控制启动过程。我们将在第五章详细讨论 Bootstrapper 课;但是现在,让我们为这个项目添加并创建类。

将 Prism 4 引导程序类添加到主项目中

右键单击项目,从上下文菜单中选择添加 - 。在添加新项目对话框中,在名称文本框中输入Bootstrapper。点击添加添加类别。

添加 Prism 4 引导程序代码

将以下代码添加到Bootstrapper类中:

清单 2:引导程序类

      using System;
      using System.Windows;

      using Microsoft.Practices.Prism;
      using Microsoft.Practices.Unity;
      using Microsoft.Practices.Prism.UnityExtensions;

      namespace HELLO_WORLD.MAIN
      {
          public class Bootstrapper : UnityBootstrapper
          {
              protected override DependencyObject CreateShell()
              {           
                  //Create and show the Prism 4 shell form:
                  MainWindow Shell = Container.Resolve<MainWindow>();

                  Shell.Show();
                  return Shell;
              }          
          }
      } 

让我们看一下清单 2 中的代码。首先注意类继承了UnityBootstrapper类。这是我们的依赖注入容器。如果你不熟悉 DICs,不要担心——我将在第 5 章讨论它们是什么以及它们是如何工作的。

接下来是CreateShell法。这个方法用来替换我们之前在 App.xaml 文件中删除的StartupUri标记。此方法返回一个DependencyObject;返回这种类型的对象允许我们返回任何从DependencyObject类型派生的对象。在这种情况下,我们返回MainWindow作为我们的壳形式。请注意,我们使用 DIC 来创建我们的 shell 表单,而不是使用new关键字来实例化对象。我们将在后面的章节中探讨我们为什么这样做。但是现在,请记住,使用 Unity,解析实体相当于用新关键字实例化对象。

使用 Prism 4 引导程序代码

您可能已经注意到,我们实际上还没有创建和使用引导程序。这是我们的下一步。现在我们有了一个Bootstrapper类,让我们实例化并调用CreateShell方法。

清单 3:应用程序 xaml.cs 代码

      using System;
      using System.Windows;

      namespace HELLO_WORLD.MAIN
      {
          /// <summary>
          /// Interaction logic for App.xaml
          /// </summary>
          public partial class App : Application
          {
              protected override void OnStartup(StartupEventArgs e)
              {
                  base.OnStartup(e);

                  Bootstrapper Bootstrapper = new Bootstrapper();
                  Bootstrapper.Run();
              }
          }
      } 

清单 3 中的代码用于实例化Bootstrapper类。接下来,我们称之为Bootstrapper.Run法。这个方法调用类中的其他方法,包括用来显示外壳形式的CreateShell方法。

运行该解决方案将显示我们的 shell 表单。此时的 shell 表单只是一个空白表单。让我们给表单添加一条消息。

向外壳表单添加标签

现在我们有了一个可行的解决方案,让我们通过在 shell 表单中添加一条消息来结束。向外壳表单添加以下标记:

清单 4:外壳表单标记

      <Window
          x:Class="HELLO_WORLD.MAIN.MainWindow"

          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

          Title="Hello World"
          Height="350"
          Width="525"
          WindowStartupLocation="CenterScreen">

          <Window.Background>
              <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                  <GradientStop Color="#FF2D6FA6" Offset="0"/>
                  <GradientStop Color="#FF084D87" Offset="1"/>
                  <GradientStop Color="#FFF0F045" Offset="0.549"/>
              </LinearGradientBrush>
          </Window.Background>

          <Grid>

              <Label
                  Name="MainLabel"
                  Content="HELLO PRISM 4!"
                  HorizontalAlignment="Center"
                  VerticalAlignment="Center"
                  FontSize="36"
                  FontWeight="Bold"
                  Foreground="Red">           
              </Label>

          </Grid>

      </Window>

清单 4 中的 XAML 标记是一个很好的例子,说明了使用 WPF 创建基本布局的必要性。随着我们的进步,您会发现 XAML 是您可能会遇到的最强大和最广泛的标记语言之一。让我们仔细看看标记。

基础控件是System.Windows.Window控件。这是将在窗口中使用的所有其他控件的容器控件。

x:Class标签结合了窗口的名称空间和类名;它描述了窗口控件的关联类。

这两个 XML 命名空间标记将窗口与 DLL 文件相关联,窗口在处理对象时将使用这些文件。

下一行标记显示窗口的属性。例如,窗口标题设置为“Hello World”,而WindowStartupLocation设置为“CenterScreen”。

接下来,窗口Background被设置为LinearGradientBrush。这是你在表单背景上看到的三种颜色。

Grid控件是一个强大的布局控件,可用于在外壳窗体和其他容器控件中定位控件。

包含在Grid控件中的是一个标签,其内容设置为 HELLO PRISM 4

图 6 显示了最终解决方案的示例。

值得注意的一点是,在这个例子中,我们只使用了一个 Prism 4 构造。到目前为止,我们唯一使用的 Prism 4 库是我们Bootstrapper类中的 Unity 依赖注入容器(DIC)!统一驾驶员信息中心包含在 Prism 4 中,但它实际上是一个独立的驾驶员信息中心——它可以很容易地独立使用。

不要绝望!在接下来的章节中,我们将把 Prism 4 集成到本章的基本框架中,因为我们会看到更详细的 Prism 4 解决方案。

| | 注意:另一个有趣的点是,统一驾驶员信息中心也作为其应用程序块之一包含在微软企业库中。 |

摘要

在这一章中,我们看一下构建微软 Prism 4 准系统解决方案需要什么。启动一个 Prism 4 解决方案需要更多的工作,但是在接下来的章节中,我们将看到当构建架构良好的 WPF 解决方案时,这些额外的工作是如何得到回报的。