如何实现新的PrismApplication来替换Bootstrapper类

时间:2017-12-20 15:28:12

标签: prism

由于Bootstrapper类已经过时使用Prism 7,我想使用PrismApplication类更改我的C#WPF应用程序。

有人知道如何使用Bootstrapper : UnityBootstrapper对新PrismApplication重构Prism 6应用程序吗?

我在问,因为关于这些预发行版的文档非常有限,而且我不是最了解我需要做什么才能看到Prism源代码。

3 个答案:

答案 0 :(得分:13)

这取决于你的引导程序的作用,但是Prism.Unity.PrismApplication有类似的方法要覆盖,所以你应该能够从引导程序复制代码。您可能只需要RegisterTypesCreateShell。请务必更新App.xaml以更改申请类型...

App.xaml应该是这样的:

<prism:PrismApplication x:Class="WpfApp1.App"
                        x:ClassModifier="internal" 
                        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        xmlns:prism="http://prismlibrary.com/"/>

为了完整起见,App.xaml.cs

internal partial class App
{
    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
        throw new NotImplementedException();
    }

    protected override Window CreateShell()
    {
        throw new NotImplementedException();
    }
}

答案 1 :(得分:0)

好吧,所以称我为哑巴之类的人,但是我遇到了相同的问题,并且出现了相同的错误:

  

App.RegisterTypes(IContainerRegistery):找不到合适的方法来覆盖

我的问题是我从Here复制并粘贴了App.xaml,从Here复制并粘贴了cs,而没有从{{ 1}}至App.xaml

答案 2 :(得分:0)

我从Prism samples on GitHub的示例1开始,立即收到一条警告,提示不建议使用UnityBootstrapper。因此,我试图将其升级到当前机制。

第一步是将应用程序的基类从Application的{​​{1}}替换为PrismApplication中的App.xaml。现在应该看起来像这样;

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

    </Application.Resources>
</unity:PrismApplication>

然后在App.xaml.cs中,删除对Application的引用,并实现PrismApplication的抽象方法。将InitializeShellBootstrapper.cs的内容复制到CreateShell()方法中。最终结果应如下所示:

/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App
{
    protected override Window CreateShell()
    {
        return Container.Resolve<MainWindow>();
    }

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
    }
}

我还为MainWindow.xaml添加了一些标记,以确保其正确解析;

<Window x:Class="BootstrapperShell.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Shell" Height="350" Width="525">
    <Grid>
        <TextBlock HorizontalAlignment="Center"
                   VerticalAlignment="Center"
                   FontSize="24">Hello</TextBlock>
    </Grid>
</Window>

一切都应该像以前一样进行。