Как реализовать новую 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>
Все должно работать как раньше.