WPFにてPrism使用時にMainメソッドを書き換える方法

WPF

Prismフレームワークで作成したプロジェクトのMainメソッドの書き換えを行おうと思ったら少し手間取ったので備忘録として残しておきます。

Mainメソッドの書き換えについて

こちらのサイトが参考になりますのでご覧になってください。

WPF:Mainメソッドを書き変えるには?[C#/VB]
WPFアプリのMainメソッドは通常、自動生成される。本稿では、Mainメソッドの自動生成をやめ、独自の処理を行うように書き換える方法を解説する。

App.xaml.csについて

プロジェクトを作成すると、以下のコードが初期状態で書かれています。

// usingは省略
public partial class App
{
    protected override Window CreateShell()
    {
        return Container.Resolve<MainWindow>();
    }

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {

    }
}

ここにMainメソッドを加えても、画面が表示されずうまく動きません。

// usingは省略
public partial class App
{
    [STAThread]
    public static void Main()
    {
        // 何か処理
    }

    protected override Window CreateShell()
    {
        return Container.Resolve<MainWindow>();
    }

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {

    }
}

対応方法

まずクラスファイルを追加します。ここではShell.csというファイルを追加します。そして、以下のようなコードを書きます。

// usingは省略
class Shell : PrismApplication
{
    protected override Window CreateShell()
    {
        return Container.Resolve<MainWindow>();
    }

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {

    }
}

次に、App.xaml.csを以下のように修正します。CreateShell()、RegisterTypes()は削除してください。

// usingは省略
public partial class App
{
    [STAThread]
    public static void Main()
    {
        // 何か処理

        Shell shell = new Shell();
        shell.Run();
    }
}

最後に、App.xamlの先頭タグがprism:PrismApplicationとなっていると思います。これをApplicationに変更します。

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

    </Application.Resources>
</Application>

これで、Mainメソッドを書き換えつつPrismの使用が可能となりました。

コメント

タイトルとURLをコピーしました