2

Autofacは、多対多のパブリッシュ/サブスクライブイベントメッセージングを実行するための使いやすいメッセージブローカーをサポートしていますか?

編集:

public class Service1
{
    [Publish("message://an-event")]
    public event Event<EventParams> AnEvent;

    public void DoSomething()
    {
        // do something
        // [...]

        // publish message
        if (AnEvent != null)
            AnEvent(this, new EventParams(something))
    }
}

public class Service2
{
    [Subscribe("message://an-event")]
    public OnAnEvent(object sender, EventParams eventParams)
    {
        Console.WriteLine("Hello World from Service2")
    }
}

public class Service3
{
    [Subscribe("message://an-event")]
    public OnAnEvent(object sender, EventParams eventParams)
    {
        Console.WriteLine("Hello World from Service3")
    }
}

Ninjectsメッセージブローカー拡張機能の優れた点は、そのシンプルさです。何かを公開するイベントと、このイベントをサブスクライブするメソッドにアノテーションを追加するだけで済みます。コンテナは自動的に接続を処理します。サービスをバインドするだけです。

autofacは似たようなものがありますか?そうでない場合、autofacでこのようなことを行うための最良の方法は何ですか?

4

3 に答える 3

3

Autofacは現在、特定のメッセージブローカーサポートを備えた状態で出荷されていません。AutofacはメッセージブローカーではなくIoCコンテナーであり、何かが追加された場合、それはNinjectのbbeventbrokerが機能する方法で外部システムをサポートする拡張機能になります-イベント処理の配線を支援する可能性がありますが、実際のブローカーの管理は適切ではありません。(Autofacが独自のMVCまたはWCF実装を行わないのと同じように、既存のシステムとのインターフェイスを支援するだけです。)

Autofacのライフタイムイベントカスタム登録ソースなどを使用して、 bbvcommon Event BrokerNServiceBusなどのシステムと独自の統合を行うことができますが、正確にどのように行う必要があり、どのように見えるかは、システムによって異なります。あなたは統合しています。他の統合コンポーネントのソースを調べて、アイデアやパターンを取得できます。

何かが機能するようになった場合は、Autofac.Extrasプロジェクトとして含めるために貢献することを検討してください。

于 2013-02-05T16:24:37.263 に答える
2

https://github.com/ninject/ninject.extensions.weakeventmessagebrokerのようなものが必要だとすると、答えは確かに「はい」です。実際、メッセージブローカーの実装がIoCコンテナーに関連付けられる理由がわかりません。これらは完全に独立したコンポーネントであり、完全に別個のタスクがあります。メッセージブローカーの実装を取得して、IoCコンテナーに登録できます。

ninject.extensions.weakeventmessagebrokerを選択して、次のようにAutofacに登録することもできます。

builder.RegisterType<EventReflectionStrategy>().As<IPlanningStrategy>();
builder.RegisterType<EventBindingStrategy>().As<IActivationStrategy>();
builder.RegisterType<WeakEventMessageBroker>().As<IWeakEventMessageBroker>()
       .SingleInstance();

IWeakEventMessageBroker次に、それを使用するタイプに依存関係として追加します。でも、自分で試したことはありません。

すぐに使えるものではないかもしれませんが、それでも非常に簡単です。

アップデート

コードサンプルを編集して、ブローカーをシングルトンに変換しました。これは、期待どおりに機能するために必要です。

于 2013-02-03T19:50:39.850 に答える
0

メッセージブローカーのアーキテクチャ自体は、使用しているコンテナに関連付けられていません。Rxに基づくものを含む、.NETメッセージブローカーのいくつかの例については、この記事を参照してください。

于 2013-06-30T13:40:50.993 に答える