ドローイング空間

3D-CADを中心に、雑多なことをかいています。

Prismのモジュール方式のクイックスタートをやってみる

広告

C#WPFを使用して、MVVMデザインパターンを実装するためのToolkitのPrismの サンプルアプリケーション「Modularity With Unity QuickStart」を行ってみます。

 

このサンプルファイルは、Prism 5.0 for WPFに含まれています。

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」を実行します。

指定したフォルダにファイルが展開されました。作成されたフォルダ内から、「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パッケージの管理」を選択します。

ソリューションエクスプローラーから、ModularityWithUnity.Desktopの「参照」を選択し、 右クリックして、「NuGetパッケージの管理」を選択します。

「更新プログラム」を選択し、Unity以外のチェックボックスを選択し、「更新」をクリックします。

「更新プログラム」を選択し、Unity以外のチェックボックスを選択し、「更新」をクリックします。

プレビューダイアログが表示されます。OKをクリックします。

プレビューダイアログが表示されます。OKをクリックします。

ライセンスの同意ダイアログが、表示されます。「同意する」をクリックするとインストールされます。

ライセンスの同意ダイアログが、表示されます。「同意する」をクリックするとインストールされます。

ビルドメニューで、「ソリューションのリビルド」を選択します。

ビルドメニューで、「ソリューションのリビルド」を選択します。

クイックスタートを実行するために、F5を押します。

同じ箇所でエラーが発生します。

修正方法がわからないので、ここで終了します。

クイックスタートは、アプリケーションのモジュール化を説明するためのものです。 しかし、提供されたコードとドキュメントは、それなりのC#の理解力を必要とするため、 複数の.csファイルがどのように働いているか認識できません。かなり混乱します。 そのため、理解することが困難です。

理解するには、複数の絡みあった機能のそれぞれを独立させたより単純なアプリケーションに分割して動作を確認する必要がありそうです。

MEFのクイックスタートを実行する

MEFのコードでは問題が発生しない可能性があるので、確認してみます。

フォルダ内の「Open Modularity With Mef QuickStart」をダブルクリックします。

フォルダ内の「Open Modularity With Mef QuickStart」をダブルクリックします。

クイックスタートを構築して、実行します。

ビルドメニューで、「ソリューションのリビルド」を選択します。

クイックスタートを実行するために、F5を押します。

実行できました。

そこで、「Modularity With Mef QuickStart」を使用して、コードを確認していくことにします。

サンプルアプリケーションの動作を確認する

続いて、「Modularity With Mef QuickStart」アプリケーションの動作を確認します。

メインウインドウは、モジュールの初期状態を表示するそれぞれのモジュールの設定を表示します。 アプリケーションを起動すると、モジュールDとモジュールAは、発見され、初期化されます。

まず、モジュールDは、アプリケーションの起動時に、ディレクトリ検査によって発見されます。 続いて、モジュールAが、利用可能で、そして、モジュールDに依存するので、初期化されます。 つまり、モジュールDが読み込まれた後、モジュールAが初期化されます。

モジュール間の依存関係が指定されていない場合、モジュールの読み込み順序は、非決定論的です。

アプリケーションを起動すると、モジュールDとモジュールAは、発見され、初期化されます。

Module A コントロール上に、カーソルを重ねます。マウスをModule Aに重ねると、説明を表示するツールチップが表示されます。

Module A コントロール上に、カーソルを重ねます。マウスをModule Aに重ねると、説明を表示するツールチップが表示されます。

モジュール情報ツールチップ

Module Information tooltip

ツールチップは、そのモジュールの以下の情報を表示します。

  • 状態 : Status
  • 発見 : Discovery
  • 初期化 : Initialized
  • ダウンロードのタイミング : Downloaded
  • 依存関係 : Depends On

続いて、Module B と Module C コントロールをクリックします。 その結果、それぞれのモジュールの初期状態は、変化して、モジュールが読み込まれ、ビジュアルコントロールが更新されます。

続いて、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の初期化後まで初期化されません。

Module F コントロールをクリックします。Module F コントロールをクリックすると、 Module E と Module Fが読み込まれるはずですが、例外が発生します。

ディバッグを中止します。

ディバッグを中止します。

NuGetを使用して、ライブラリを更新します。

ライブラリを更新するとエラーが解消される可能性があります。ライブラリを更新して、エラーが解消されるか確認します。

ソリューション内のそれぞれのプロジェクトの参照で右クリックして、「NuGetパッケージの管理」を選択し、ライブラリを更新します。

ソリューション内のそれぞれのプロジェクトの参照で右クリックして、「NuGetパッケージの管理」を選択し、ライブラリを更新します。

「更新プログラム」を選択し、すべてのパッケージを選択のチェックボックスをチェックし、「更新」をクリックします。

「更新プログラム」を選択し、すべてのパッケージを選択のチェックボックスをチェックし、「更新」をクリックします。

プレビューダイアログが表示されますので、OKをクリックします。

プレビューダイアログが表示されますので、OKをクリックします。

ライセンスの同意ダイアログが表示されます。「同意する」をクリックすると更新されます。

ライセンスの同意ダイアログが表示されます。「同意する」をクリックすると更新されます。

他のプロジェクトでも同様に更新します。Module Fを更新する際に、何度か、Visual Studioが異常終了しました。

他のプロジェクトでも同様に更新します。

ビルドメニューで、「ソリューションのリビルド」を選択します。

ビルドメニューで、「ソリューションのリビルド」を選択します。

クイックスタートを実行するために、F5を押します。

Module Fをクリックすると同じ場所で、例外が発生します。 更新してもエラーの発生に影響がないことが確認できました。