Prism コードサンプル学習:07-Modules
はじめに
以下の記事の続きです。
https://qiita.com/mngreen/items/41d3bd3159be3b279a5f
07-Modules
本サンプルではModuleの読み込みを、以下の5パターンの方法で行うやり方です。
- App.configを用いた読み込み07-Modules - AppConfig
- プロジェクトを参照し、IModuleCatalogを用いて読み込み07-Modules - Code
- Moduleが格納されているフォルダを指定して読み込み07-Modules - Directory
- ModuleInfoのインスタンスを生成してIModuleCatalogに追加07-Modules - LoadManual
- ModuleInfoをXamlで定義し、そのXaml構造からModuleCatalogを生成07-Modules - Xaml
App.configを用いた読み込み
- App.configで読み込まれるようにどこで設定されているか
-
App.xaml.csでCreateModuleCatalogをオーバーライドして
return new ConfigurationModuleCatalog();
としているが、この内部の呼び先をたどっていくとConfigurationStore.Desktopに到達する。App.configが参照されるのは、ここでConfigurationManagerを利用しているから。
-
プロジェクトを参照し、IModuleCatalogを用いて読み込み
Moduleが格納されているフォルダを指定して読み込み
- フォルダパスを指定すると、それ以下のModuleをかき集めてくれる。実際に読み込み処理が発生するのはここ
- 内部で使用されているイベントは遅延ローディングする仕組みで見たのと同じように見える。
- ビルド時にModuleフォルダに格納するように設定の変更が必要
ModuleInfoのインスタンスを生成してIModuleCatalogに追加
- プロジェクトを参照し、IModuleCatalogを用いて読み込みが隠蔽しているところを自前でもできることを示しているだけ。
ModuleInfoをXamlで定義し、そのXamlからModuleCatalogを生成
- Uriでxamlを指定し、dllを読み込む。処理はここ
-
以下のように読み込み対象のモジュールを指定する。
<m:ModuleCatalog xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:m="clr-namespace:Prism.Modularity;assembly=Prism.Wpf"> <m:ModuleInfo ModuleName="ModuleAModule" ModuleType="ModuleA.ModuleAModule, ModuleA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> </m:ModuleCatalog>
-
個人的所感
- プロジェクト参照が必要な方法は以下。
- プロジェクトを参照し、IModuleCatalogを用いて読み込み
- ModuleInfoのインスタンスを生成してIModuleCatalogに追加
- プロジェクト参照がなくても動的に読み込める方法は以下。
- App.configを用いた読み込み
- Moduleが格納されているフォルダを指定して読み込み
- ModuleInfoをXamlで定義し、そのXamlからModuleCatalogを生成
プロジェクト参照をなくせて、変更が少なく済みそうなModuleが格納されているフォルダを指定して読み込みが良さそうに見える。
他の動的に読み込める方法はバージョンや名前空間が変わるごとにメンテが必要となり大変そう。
おわりに
今回はModuleの読み込む方法について確認しました。
個人的には動的に読み込める恩恵を受けられる方法が良いかと思いますが、Prismが使われているオープンソースでの主流についても把握したほうがよいと思いました。
次回、08-ViewModelLocatorについて見ていこうと思います。