私には Mediator パターンの古典的な使い方のように思えます。Mediator は、切断されたコンポーネントが互いに通信できるようにします。
私はたまたま、自分の MVVM フレームワークにこれのコピーを持っています。これは、ここから取得できます。
http://cinch.codeplex.com/SourceControl/changeset/view/70832#796984
これもつかむ
http://cinch.codeplex.com/SourceControl/changeset/view/70832#797008
私の実装では、WeakReference を使用してそれを行うことができるため、強い参照は保持されません。また、サブスクライバーが属性を使用して特定のイベントをリッスンするメソッドを接続し、パブリッシャーが T の新しいメッセージをブロードキャストすることもできます。
パブリッシャー/サブスクライバーはメディエーターに登録するだけです
//done by both subscriber and publisher
Mediator.Instance.Register(this);
//Subscriber
[MediatorMessageSinkAttribute("DoBackgroundCheck")]
void OnBackgroundCheck(string someValue) { ... }
//publisher might typically do this
mediator.NotifyColleagues("DoBackgroundCheck", "Nice message");
サブスクライバーがメッセージ (WPF / Winforms にはこれらのビルド済みのものがある) を受け取ったときに、正しいスレッドへの呼び出しをディスパッチするために、独自のSynchronizationContextを使用する必要がある場合があります。
Synchronise/aysynchronise 呼び出しも許可します