※サンプルコードのダウンロードは、原文リンクから行ってください。
パターンと実践 ディベロパー・センター
Event Aggregation QuickStart Using the Prism Library 5.0 for WPF(原文)
Microsoft Prism Library 5.0 for WPFの開発者のガイドから:
イベント集約のクイックスタートのサンプルは、Prism LibraryのEvent Aggregatorサービスを使用する、複合アプリケーションを、 どのように、構築するかを実演します。このサービスは、あなたが、アプリケーションにおいてコンポーネントの間で疎く結合した通信を確立することができます。 Event Aggregatorは、WPF、Windows Phone 8とWindowsストア・アプリを使用することができる、Portableクラス・ライブラリー(PCL)です。
実際の使い方
Business Scenario
Event AggregationのQuickStartのメイン・ウィンドウは、架空の財務システムのサブセットを示します。 このウィンドウの中で、ユーザーは、資金を、顧客に追加することができ、そして、各々の顧客のための更新記録を確かめることができます。 次に示す図は、クイックスタートのメイン・ウィンドウを示しています。
Event AggregationのQuickStartユーザー・インターフェイス
Event Aggregation QuickStart user interface
QuickStartを構築して、そして、実行する
Building and Running the QuickStart
このQuickStartは、実行するために、Visual Studio 2012、あるいは、それ以後と.NET Framework 4.5.1を必要とします。
Event AggregationのQuickStartを構築し、そして、実行するために、
To build and run the Event Aggregation QuickStart
- Visual Studioでは、ソリューション・ファイルQuickstarts\EventAggregation\EventAggregation_Desktop.slnを開きます。
- Buildメニューで、Rebuild Solutionをクリックします。
- QuickStartを実行するために、F5を押してください。
実装の詳細
Implementation Details
QuickStartは、Event Aggregatorサービスを使用するときに、相互作用する重要な要素を強調します。 この項目では、次の図に表示されるQuickStartの主要な成果物を説明します。
Event AggregationのQuickStartの概念ビュー
Event Aggregation QuickStart conceptual view
FundAddedEventイベント
The FundAddedEvent Event
FundAddedEventイベントは、ユーザーが、顧客のための資金を追加するとき、発生します。
このイベントは、疎く結合した方法で、情報をやりとりするために、ModuleAとModuleBモジュールで、使用します。
次に示すコードは、イベント・クラスの署名を示しています。;クラスは、PubSubEvent
C#
public class FundAddedEvent : PubSubEvent<FundOrder>
{
}
次のコードは、FundOrderクラスのためのクラス定義です。; このクラスは、資金の注文を表現し、そして、銘柄コード、そして、顧客の識別子を指定します。 このコードは、EventAggregation.Infrastructure.Desktop\FundOrder.csに配置されています。
C#
public class FundOrder
{
public string CustomerId { get; set; }
public string TickerSymbol { get; set; }
}
イベント出版
Event Publishing
ユーザーが、顧客のために、資金を追加するとき、AddFundPresenterクラスで、 (ModuleA.Desktop\AddFundPresenter.csに配置される)イベントFundAddedEventが、公開されます。 次に示すコードは、FundAddedEventがどのように公開されるかを示しています。
C#
void AddFund(object sender, EventArgs e)
{
FundOrder fundOrder = new FundOrder();
fundOrder.CustomerId = View.Customer;
fundOrder.TickerSymbol = View.Fund;
if (!string.IsNullOrEmpty(fundOrder.CustomerID) && !string.IsNullOrEmpty(fundOrder.TickerSymbol))
eventAggregator.GetEvent<FundAddedEvent>().Publish(fundOrder);
}
前述のコードで、まず、FundOrderインスタンスは作成され、そして、構成されます。 続いて、FundAddedEventは、Event Aggregatorサービスから取得されます。 そして、Publishメソッドは、その上で呼び出されます。; これは、FundAddedEventイベントのパラメータとして、最近作成されたFundOrderインスタンスを指定します。
イベントの購読
Event Subscription
ModuleBモジュールには、ActivityViewという名前のViewが含まれています。 このViewのインスタンスは、独りの顧客ための更新記録を示しています。 ModuleBの初期化クラスは、次のコードで示すように、Customer1のために1つ、Customer2のために1つ、このViewの2つのインスタンスを作成します。 (このコードはModuleB.Desktop\ModuleB.csに配置されます)。
C#
public void Initialize()
{
ActivityView activityView1 = Container.Resolve();
ActivityView activityView2 = Container.Resolve();
activityView1.CustomerId = "Customer1";
activityView2.CustomerId = "Customer2";
IRegion rightRegion = RegionManager.Regions["RightRegion"];
rightRegion.Add(activityView1);
rightRegion.Add(activityView2);
}
ActivityView Viewのインスタンスがつくられるとき、フィルタ式を使用して、 FundAddedEventイベントに、そのプレゼンターは、イベントハンドラを購読します。 このフィルタ式は、状態を定義します。イベント引数は、呼び出すためのイベント・ハンドラのために、満たす必要があります。 この場合、資金の注文が、該当する場合、顧客が、Viewに関連付けられる条件が満たされます。 イベント・ハンドラには、ユーザー・インターフェイス内に、追加された新しい資金を、顧客に表示するためのコードが含まれています。
次に示すコードは、ActivityPresenterクラスのCustomerIdプロパティを示しています。 プロパティ・セッターで、FundAddedEventイベントのためのイベント・ハンドラは、Event Aggregatorサービスを使用して購読されます。
C#
public string CustomerId
{
get { return _customerId; }
set
{
_customerId = value;
FundAddedEvent fundAddedEvent = eventAggregator.GetEvent<FundAddedEvent>();
if (subscriptionToken != null)
{
fundAddedEvent.Unsubscribe(subscriptionToken);
}
subscriptionToken = fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
View.Title = string.Format(CultureInfo.CurrentCulture, Resources.ActivityTitle, CustomerId);
}
}
前述のコードから抜き出す次の行は、イベント・ハンドラが、FundAddedEventイベントを、どのように、購読するかを示します。
C#
subscriptionToken = fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.UIThread, false, FundOrderFilter);
前述の行では、次のパラメータは、購読を設定するために渡されます。:
FundAddedEventHandlerアクション。このイベント・ハンドラは、Addボタンがクリックされ、そして、フィルター条件が満足するとき、実行されます。
ThreadOption.UIThreadオプション。このオプションは、イベント・ハンドラが、ユーザー・インターフェイス・スレッドの上で実行されることを示しています。
KeepSubscriberReferenceAliveフラグ。 このフラグは、falseで、そして、購読者の参照の寿命が、イベントによって管理されないことを示しています。 これは、プレゼンター・クラスの購読者の寿命は、参照が含まれる、そのViewで管理されるため、falseに設定します。
フィルタ述部。このフィルタは、資金が、Viewの対応する顧客に追加されるとき、イベント・ハンドラだけが、呼び出されるために、指定する状態です。
ユニットと受け入れテスト
Unit and Acceptance Tests
Event Aggregator QuickStartの単体テストを実行します
To run the Event Aggregator QuickStart unit tests
Visual StudioのTestメニューで、Runを押し、そして、その次に、All Testsをクリックします。
結論
Outcome
受入検査
Acceptance Tests
Event AggregatorのQuickStartには、受入検査が含まれている分離したソリューションが含まれています。 受入検査では、あなたが、一連の手順に従うとき、アプリケーションが、どのように動作する必要があるかを説明します。 あなたは、さまざまな使い方をする、アプリケーションの機能の挙動を調べるために、受入検査を使用することができます。
Event AggregatorのQuickStart受入検査を実行します
To run the Event Aggregator QuickStart acceptance tests
- Visual Studioで、ソリューション・ファイルQuickStarts\EventAggregation\EventAggregation.Tests.AcceptanceTest\EventAggregation.Tests.AcceptanceTest.slnを開きます。
- Test Explorerを開きます。
- ソリューションを構築した後、Visual Studioは、テストを捜し出します。受入検査を実行するために、Run Allボタンをクリックします。
結論
Outcome
あなたは、ウィンドウのQuickStartを参照する必要があります。 そして、テストは、自動的に、アプリケーションと相互作用します。 テスト実行の終了時に、あなたは、すべてのテストが渡されたことを確かめる必要があります。
詳細情報
More Information
イベント集約の詳細については、疎く結合したコンポーネント間で情報をやりとりする(原文)を参照してください。
以前のバージョンのドキュメント
旧バージョン向けの和訳されたドキュメントのリンクです。
イベント収集のクイックスタート(外部サイト)