csharpshare.com
Show / Hide Table of Contents

从Prism 6.x版本进行迁移

Gitee仓库 Prism-Documentation-CH 时间 2023-1-22

在版本6.x中,使用Prism框架需要实现一个从Prism提供的容器引导程序类中派生的引导程序类。在下面的示例中,提供了一个最简单的版本。

class AppBootstrapper : UnityBootstrapper
{
    protected override DependencyObject CreateShell()
    {
        return Container.Resolve<MainWindow>():
    }

    protected override void InitializeShell()
    {
        Application.Current.MainWindow.Show();
    }
}

引导程序类会在Application类中使用,并按如下方式实现:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        var bootstrapper = new AppBootstrapper();
        bootstrapper.Run();
    }
}

以上是关于Prism 6.x的最小化可行实现。如果需要将应用程序升级到Prism 7.x,则需要将引导程序类中的实现移至Application类中。

更新Application类

第一步是更新应用程序类。在大多数情况下,App应用程序类派生自Application。而在Prism 7.x中,该类将根据所选容器从Prism应用程序类派生出来。下列示例使用的是Unity容器。

更新Application XAML

请确保将正确的命名空间添加到XAML中。

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

在上面的代码片段中,开放标签被改变了。另外还要注意在第6行添加的xmlns:prism命名空间。

接下来更新后面的App类代码。

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using Prism.Unity;

namespace WpfApp1
{
    public partial class App : PrismApplication
    {
    }
}

更新App类后,将会有几个抽象方法需要以Prism 6.x中类似的方式进行实现。

首先实现CreateShell。这与Prism 6.x相同,可以按如下方式实现:

protected override Window CreateShell()
{
    var w = Container.Resolve<MainWindow>();
    return w;
}

接下来需要实现RegisterTypes方法。这和Bootstrapper类中的ConfigureContainer是一样的。如果您没有任何服务需要注册,可以留空。

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
    // pretend to register a service
    containerRegistry.Register<Services.ISampleService, Services.DbSampleService>();
    // register other needed services here
}

其他引导程序功能

在6.3x版本的引导程序中包含了其他可以被覆写的功能。这些功能应该可以在Prism 7.x应用程序中的PrismApplication类中存在可以覆写的等效项。一个常见的例子是ConfigureModuleCatalog()函数。

本文导航
  • 更新Application类
    • 更新Application XAML
    • 其他引导程序功能
返回顶部 ©2022-2023 csharpshare.com    冀ICP备2022026743号-1     公安备案图标 冀公网安备 13052902000206号     Icons by Icons8