0

Ninject の bbEventBroker 拡張機能を使用して、アプリケーションで一部の pub/sub を結び付けています。イベントを発行するビジネス サービスがあり、イベントをサブスクライブする他のクラスがあります。Ninject との配線は機能していますが、問題が 1 つあります。イベント サブスクライバーをインスタンス化する明確な場所がわかりません。現在、私はそれをハッキングしており、他の誰かが使用する前に、すべてのサブスクライバーがシングルトンとしてカーネルに要求されていることを確認しています。しかし、これは正しくないようです。何もしないと、サブスクライバーのインスタンスがなくなり、イベントが無視されてしまいます。

サブスクライバーを bbEventBroker イベントにインスタンス化して、最終的にカーネルに接続するにはどうすればよいですか?

4

2 に答える 2

1

bbvEventBroker は、サブスクライバーが既にインスタンス化され、EventBroker に登録されていることを前提としています。サブスクライバーのライフサイクルを管理する手段として、Ninject.Extensions.DependencyCreation を検討することをお勧めします。これを MVP アプリケーションでうまく使用して、アプリケーションの起動時にすべてのプレゼンター (つまり、bbvEventBroker サブスクライバー) がインスタンス化されるようにしました。

于 2013-01-28T15:48:45.407 に答える
0

これを解決するためにかなりハッキーなコードを作成することになりましたが、うまくいきます。イベント サブスクライバーを接続する Ninject モジュールでは、IEventBroker の OnActivation ハンドラーも追加します。そのアクティベーション ハンドラーが呼び出されると、各サブスクライバーのカーネルで Get を実行します (リフレクションを使用して適切な型を見つけます)。これにより、各サブスクライバーのインスタンスがブローカーに接続されます。

これにより、何らかの理由で、Ninject が破棄しようとしている間に IEventBrokers がアクティブになる可能性があるという問題が発生します。そのため、モジュールで OnDispose をオーバーライドし、破棄が開始されたら上記の処理を停止するフラグを設定する必要がありました。ハックにハック!:-)

于 2013-02-01T15:39:17.957 に答える