前のエントリで、Composite Application Guidance for WPFのハローワールドを試してみた。
Composite Application Guidance for WPFは、メインとなるウィンドウにRegionと呼ばれるものを定義して、そのRegionに対してUserControlを当て込むという仕組みで動いてる。RegionにはContentControlやItemsControlとかを使える。
つまり、Composite Application Guidance for WPFを使ってアプリを組むとメインウィンドウは、デザイナ上から見ると何も無いウィンドウになってしまう。GridやDockPanelやStackPanelなどのレイアウトパネルで区画を区切って、各区画にはRegionManager.RegionName添付プロパティで名前が付けられたItemsControlが置かれているといったものになるからね。
Regionに入れるUserControlは、通常メインウィンドウのあるプロジェクトとは別のプロジェクトに作成する。
IModuleインターフェースを実装したクラスの、InitializeメソッドでRegionManagerを取得してRegionにUserControlを登録するって寸法だ。
IModuleを実装したクラスは、任意のフォルダにdllを置いたり、コード内で明示的に定義したり、構成ファイルに定義を書いたりすることでメインのウィンドウに統合することが出来る。そして、これらのModuleやRegionManagerやその他もろもろのファイルのインスタンスの生成や依存関係の管理はEntLibにあるUnityContainerが担当している。
若干間違いはあるかもしれないけど、個人的な理解は今のところこんな感じ。ということで、Composite Application Guidance for WPFで何か作る時のプロジェクトの構成は下のような感じになると思う。
- Mainプロジェクト
App.xaml
Shell.xaml
XxxBootstrapper.cs - ModulePPP
PPPModule
View/PPPView.xaml
その他もろもろ - ModuleYYY
もろもろ - 共通で使用するクラス等を入れるプロジェクト
とまぁ、こんな感じに作ってるとModulePPPで何かあったときにModuleYYYで処理をしたいって時がめんどくさそうだ?という話しになる。
ここらへんにはIEventAggregatorというものを使うといいという情報をゲットしてサンプルを見たので、次はそれについて書いてみようと思う。
会社からなので、絵とかUPできないし昼休みが終わってしまうのでここらへんでおしまい。