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

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

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

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

http://www.atmarkit.co.jp/ait/articles/1511/04/news027.html

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の使用が可能となりました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA