从Prism 6.x版本进行迁移
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()
函数。