Prismのモジュール方式のクイックスタートをやってみる
広告
C#とWPFを使用して、MVVMデザインパターンを実装するためのToolkitのPrismの サンプルアプリケーション「Modularity With Unity QuickStart」を行ってみます。
このサンプルファイルは、Prism 5.0 for WPFに含まれています。
Prism 5.0 for WPFは、以下からダウンロードできます。
https://www.microsoft.com/en-us/download/details.aspx?id=42537
ダウンロードしたファイルを実行します。
利用許諾が表示されます。
インストールフォルダを選択します。
Unity向けのクイックスタートを実行する
指定したフォルダにファイルが展開されました。作成されたフォルダ内から、「Open Modularity With Unity QuickStart」を実行します。
Visual Studioで、ソリューションが開きます。
※Visual Studio Community 2015で実行しています。
このサンプルプログラムのドキュメントは、以下の場所にあります。 ドキュメントは、Unityバージョン、MEFバージョンとも同じドキュメントです。
原文
Modularity QuickStarts Using the Prism Library 5.0 for WPF
和訳
Prism Library 5.0 for WPFを使用したモジュール方式のクイックスタート
モジュールアプリケーションのためのドキュメントは、以下の場所にあります。
原文
4: Modular Application Development Using Prism Library 5.0 for WPF
和訳
4: WPFのための Prism Library 5.0を使用したモジュール・アプリケーション開発
クイックスタートを構築して、実行します。
ビルドメニューで、「ソリューションのリビルド」を選択します。
クイックスタートを実行するために、F5を押します。
例外が発生します。
ディバッグを中止します。
ソリューションエクスプローラーから、ModularityWithUnity.Desktopの「参照」を選択し、 右クリックして、「NuGetパッケージの管理」を選択します。
「更新プログラム」を選択し、Unity以外のチェックボックスを選択し、「更新」をクリックします。
プレビューダイアログが表示されます。OKをクリックします。
ライセンスの同意ダイアログが、表示されます。「同意する」をクリックするとインストールされます。
ビルドメニューで、「ソリューションのリビルド」を選択します。
クイックスタートを実行するために、F5を押します。
同じ箇所でエラーが発生します。
修正方法がわからないので、ここで終了します。
クイックスタートは、アプリケーションのモジュール化を説明するためのものです。 しかし、提供されたコードとドキュメントは、それなりのC#の理解力を必要とするため、 複数の.csファイルがどのように働いているか認識できません。かなり混乱します。 そのため、理解することが困難です。
理解するには、複数の絡みあった機能のそれぞれを独立させたより単純なアプリケーションに分割して動作を確認する必要がありそうです。
MEFのクイックスタートを実行する
MEFのコードでは問題が発生しない可能性があるので、確認してみます。
フォルダ内の「Open Modularity With Mef QuickStart」をダブルクリックします。
クイックスタートを構築して、実行します。
ビルドメニューで、「ソリューションのリビルド」を選択します。
クイックスタートを実行するために、F5を押します。
実行できました。
そこで、「Modularity With Mef QuickStart」を使用して、コードを確認していくことにします。
サンプルアプリケーションの動作を確認する
続いて、「Modularity With Mef QuickStart」アプリケーションの動作を確認します。
メインウインドウは、モジュールの初期状態を表示するそれぞれのモジュールの設定を表示します。 アプリケーションを起動すると、モジュールDとモジュールAは、発見され、初期化されます。
まず、モジュールDは、アプリケーションの起動時に、ディレクトリ検査によって発見されます。 続いて、モジュールAが、利用可能で、そして、モジュールDに依存するので、初期化されます。 つまり、モジュールDが読み込まれた後、モジュールAが初期化されます。
モジュール間の依存関係が指定されていない場合、モジュールの読み込み順序は、非決定論的です。
Module A コントロール上に、カーソルを重ねます。マウスをModule Aに重ねると、説明を表示するツールチップが表示されます。
モジュール情報ツールチップ
Module Information tooltip
ツールチップは、そのモジュールの以下の情報を表示します。
- 状態 : Status
- 発見 : Discovery
- 初期化 : Initialized
- ダウンロードのタイミング : Downloaded
- 依存関係 : Depends On
続いて、Module B と Module C コントロールをクリックします。 その結果、それぞれのモジュールの初期状態は、変化して、モジュールが読み込まれ、ビジュアルコントロールが更新されます。
読み込まれたモジュールのスクリーンショット
Screen shot of module loaded
Module Bは、ディレクトリ検査によって発見され、 そして、Module Cは、アプリケーションによって参照されます。両方のモジュールは、要求に応じて読み込まれます。
続いて、Module F コントロールをクリックします。Module F コントロールをクリックすると、 Module E と Module Fが読み込まれるはずですが、例外が発生します。
異常終了していましましたが、説明は、転記しておきます。
Module Fが、まず、その初期化を完了することに注意してください。しかし、依存関係のため、Module Eの初期化後まで初期化されません。
ディバッグを中止します。
NuGetを使用して、ライブラリを更新します。
ライブラリを更新するとエラーが解消される可能性があります。ライブラリを更新して、エラーが解消されるか確認します。
ソリューション内のそれぞれのプロジェクトの参照で右クリックして、「NuGetパッケージの管理」を選択し、ライブラリを更新します。
「更新プログラム」を選択し、すべてのパッケージを選択のチェックボックスをチェックし、「更新」をクリックします。
プレビューダイアログが表示されますので、OKをクリックします。
ライセンスの同意ダイアログが表示されます。「同意する」をクリックすると更新されます。
他のプロジェクトでも同様に更新します。Module Fを更新する際に、何度か、Visual Studioが異常終了しました。
ビルドメニューで、「ソリューションのリビルド」を選択します。
クイックスタートを実行するために、F5を押します。
Module Fをクリックすると同じ場所で、例外が発生します。 更新してもエラーの発生に影響がないことが確認できました。