Prism 7.1
2018/11/30
Prismのテンプレートが勝手にアップデートしていてBootstrapper.csが消えている…。
Bootstrapperのある古いバージョンはこちら。
親プロジェクト(アプリ本体)の作成
Prism Blank App(WPF)を選択したら、DIコンテナの選択画面が。
Unityを選択してプロジェクトを作成。
子プロジェクト(モジュール)の追加
上でできたソリューションに「追加」→「新しいプロジェクト」でPrism Module(WPF)テンプレートを選択。追加後のソリューション。TreasurerHelperが親、CashCalculatorが子。
親から子への参照追加
「追加」→「参照」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が表示されることを確認。続きはこちら。
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は割愛。