Prism 7.1

2018/11/30 WPF::Prism
久しぶりにPrismでアプリ作ろうかと思って作り始めたら、なんか様子が違う。
Prismのテンプレートが勝手にアップデートしていてBootstrapper.csが消えている…。
Bootstrapperのある古いバージョンはこちら

親プロジェクト(アプリ本体)の作成

TreasurerHelper010.png

Prism Blank App(WPF)を選択したら、DIコンテナの選択画面が。
Unityを選択してプロジェクトを作成。
TreasurerHelper020.png

子プロジェクト(モジュール)の追加

上でできたソリューションに「追加」→「新しいプロジェクト」でPrism Module(WPF)テンプレートを選択。
TreasurerHelper030.png


追加後のソリューション。TreasurerHelperが親、CashCalculatorが子。
TreasurerHelper040.png

親から子への参照追加

「追加」→「参照」
TreasurerHelper050.png

App.xaml.csに下記を追加

protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{
   // Addするモジュール名は作成したものに変更
   moduleCatalog.AddModule<CashCalculator.CashCalculatorModule>();
}

作成したモジュールの○○Module.csのOnInitializedを編集

public void OnInitialized(IContainerProvider containerProvider)
{
    var regionManager = containerProvider.Resolve<IRegionManager>();
    regionManager.RegisterViewWithRegion("ContentRegion", typeof(ViewA)); // View名は作成したものに変更のこと

}

親プロジェクトを実行

子プロジェクトのViewA.xamlが表示されることを確認。
TreasurerHelper060.png


続きはこちら

What’s New in Prism 7.1

こちらのページを斜め読み。
誤訳してたらすみません。

コンテナについて

MEFはサポート止めました。Autofacは今回が最後のサポートになる予定です。
Unityは新しいメンテナンス担当者によって完全に書き換えられのでPrism 6.X系からPrism 7.1にアップグレードする場合はUnityへの参照を削除し入れなおす必要があります。

IoCの一本化

Prism.IoC ネームスペースが追加され、依存性の注入を抽象化した。
コンテナを直接利用するのではなくPrismによって提供されるIContainerRegistry(タイプを登録する)とIContainerProvider(サービスを解決する)だけを使ってください。
それぞれのGetContainer()拡張メソッドを使えば実際のDIコンテナにアクセスすることも可能です。

Navigationの一本化

Prism.NavigationネームスペースがPrism.Core NuGet packageに含まれているがWPFでは未対応。WPFからも同じAPIを使えるようにするつもり。

Moduleの一本化

Prism.Modularity APIがWPF、Xamarin.Forms、Windows (UWP)間で共通化された。
それに伴いInitialize() を無くした。
新たに2つのインターフェイスを追加したので書き換えてください。
public interface IModule 
{ 
    void RegisterTypes(IContainerRegistry containerRegistry); 
    void OnInitialized(IContainerProvider containerProvider); 
} 

Prism.WPF

初期のコードを減らす為、PrismApplication base classを導入し Bootstrapper をObsoleteにしたが、Bootstrapperは今後も無くす予定は無い。
NavigationJournalにopt-outの機能が追加された。navigationに加えたくないViewがあればIJournalAwareを実装し、PersistInHistoryにfalseをセットする。

Prism.FormsとPrism.Windowsは割愛。
OK キャンセル 確認 その他