23

私は、任意のクライアントが特定のタイプのイベントにサブスクライブできるようにする非常に単純なイベント バスを作成したいと考えています。パブリッシャーがEventBus.PushEvent()メソッドを使用してバスにイベントをプッシュすると、その特定のイベント タイプにサブスクライブしたクライアントのみがイベントを取得します。

C# と .NET 2.0 を使用しています。

4

8 に答える 8

26

Tiny Messenger は良い選択です。ライブ プロジェクトで 2 年半使用しています。Wiki からのいくつかのコード例 (以下のリンク):

出版

messageHub.Publish(new MyMessage());

購読中

messageHub.Subscribe<MyMessage>((m) => { MessageBox.Show("Message Received!"); });
messageHub.Subscribe<MyMessageAgain>((m) => { MessageBox.Show("Message Received!"); }, (m) => m.Content == "Testing");

コードは GitHub にあります: https://github.com/grumpydev/TinyMessenger

Wiki はこちら: https://github.com/grumpydev/TinyMessenger/wiki

Nugetパッケージもあります

Install-Package TinyMessenger
于 2011-12-19T10:54:29.897 に答える
2

GenericMessageBusを見つけました。シンプルなクラスのひとつです。

于 2008-12-15T15:05:45.443 に答える
2

Composite Application Blockには、役に立つイベント ブローカーが含まれています。

于 2008-12-15T13:25:48.453 に答える
2

Unity 拡張機能もチェックしてください: http://msdn.microsoft.com/en-us/library/cc440958.aspx

[Publishes("TimerTick")]
public event EventHandler Expired;
private void OnTick(Object sender, EventArgs e)
{
  timer.Stop();
  OnExpired(this);
}

[SubscribesTo("TimerTick")]
public void OnTimerExpired(Object sender, EventArgs e)
{
  EventHandler handlers = ChangeLight;
  if(handlers != null)
  {
    handlers(this, EventArgs.Empty);
  }
  currentLight = ( currentLight + 1 ) % 3;
  timer.Duration = lightTimes[currentLight];
  timer.Start();
}

より良いものはありますか?

于 2009-11-05T14:56:27.750 に答える
1

別の優れた実装は次の場所にあります。

http://code.google.com/p/fracture/source/browse/trunk/Squared/Util/EventBus.cs

ユースケースには、/ trunk / Squared / Util / UtilTests / Tests/EventTests.csからアクセスできます。

この実装には外部ライブラリは必要ありません。

改善点は、文字列ではなくタイプでサブスクライブできるようになることです。

于 2010-04-22T14:51:20.897 に答える
0

私はこれを作成しました:

https://github.com/RemiBou/RemiDDD/tree/master/RemiDDD.Framework/Cqrs

ninjectには依存関係があります。あなたはMessageProcessorを手に入れました。イベントを監視したい場合、コマンドを処理したい場合は「IObserver」を実装します「ICommandHandleer」を実装します

于 2013-02-25T12:30:14.937 に答える
0

Hibernating Rhinosのエピソード 3 、Ayende のスクリーン キャスト シリーズ「Implementing the event broker」をチェックしてください。

Windsor を使用して非常に単純なイベント ブローカーを実装し、接続する方法を示します。ソースコードも同梱。

提案されたイベント ブローカ ソリューションは非常に単純ですが、イベントとともに引数を渡せるようにソリューションを拡張するのにそれほど時間はかかりません。

于 2008-12-15T13:20:39.790 に答える