Как реализовать новую PrismApplication для замены класса Bootstrapper

Поскольку класс Bootstrapper устарел с помощью Prism 7, я хотел бы изменить свое приложение WPF С#, используя класс PrismApplication.

Кто-нибудь знает, как реорганизовать приложение Prism 6 с помощью Bootstrapper: UnityBootstrapper для нового PrismApplication?

Я спрашиваю, потому что документация относительно этих предварительных выпусков довольно ограничена, и я не лучший в понимании того, что мне нужно сделать, просто глядя на исходный код Prism.

Ответ 1

Это зависит от того, что делает ваш загрузчик, но Prism.Unity.PrismApplication имеет аналогичные методы для переопределения, поэтому вы должны иметь возможность скопировать код из загрузочного устройства. Вероятно, вам нужны только RegisterTypes и CreateShell. Не забудьте обновить 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();
    }
}

Ответ 2

Итак, назовите меня тупым или как-то еще, но у меня была та же проблема с той же ошибкой:

App.RegisterTypes(IContainerRegistery): не найдено подходящего метода для переопределения

Моя проблема заключалась в том, что я пошел, скопировал и вставил App.xaml из Here и cs Here Here и не изменил пространство имен в App.xaml с x:Class="Regions.App" на x:Class="WpfApp.App"

Ответ 3

Я начал с примера 1 из примеров Prism на GitHub и сразу же получил предупреждение о том, что использование UnityBootstrapper устарело. Поэтому я попытался обновить его до действующего механизма.

Первым шагом является замена базового класса вашего приложения с Application на 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. Скопируйте содержимое InitializeShell в Bootstrapper.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>

Все должно работать как раньше.