web-dev-qa-db-ja.com

Bootstrapperクラスを置き換える新しいPrismApplicationを実装する方法

BootstrapperクラスはPrism 7で廃止されているため、PrismApplicationクラスを使用してC#WPFアプリを変更したいと思います。

Bootstrapper : UnityBootstrapperを使用してPrism 6アプリを新しいPrismApplicationにリファクタリングする方法を知っている人はいますか?

これらのプレリリースに関するドキュメントは非常に限られており、Prismソースコードを見るだけで何をする必要があるのか​​を理解するのに最善ではないため、私は尋ねています。

17
Tom

それはあなたのブートストラップが何をするかに依存しますが、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();
    }
}
14
Haukinger

GitHubのプリズムサンプル のサンプル1から始め、すぐにUnityBootstrapperの使用は非推奨であるという警告が表示されます。それで、私はそれを現在のメカニズムにアップグレードしようとしました。

最初のステップは、アプリケーションの基本クラスをApp.xamlApplicationからPrismApplicationに置き換えることです。これは次のようになります。

<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の抽象メソッドを実装します。 Bootstrapper.csInitializeShellの内容を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>

すべてが以前と同じように機能するはずです。

1
Steztric

わかりました、だから私を愚かと呼んでも、私は同じエラーで同じ問題を抱えていました:

App.RegisterTypes(IContainerRegistery):オーバーライドする適切なメソッドが見つかりません

私の問題は、 Here からApp.xamlをコピーして貼り付け、 Here からcsをコピーして貼り付け、App.xamlの名前空間を変更しなかったことです。 x:Class="Regions.App"からx:Class="WpfApp.App"

0
3xGuy