0

Observable Pattern に基づくログシステムの作成を開始しました。そのために、Reactive Extensions を使用します。ILogInfo と呼ばれる IObservable と ILogObserver と呼ばれる IObserver があります。共有ライブラリを使用するさまざまなモジュールを含むメイン アプリケーションがあります。各モジュールは ILogInfo のオブザーバーを実装し、モジュールは並行して動作できます。ここでの問題は、モジュールのスコープに登録されている ILogInfo のみを監視したいということです。

スキームの適用

このスキームには 2 つのモジュール (モジュール A とモジュール B) があり、各モジュールは ILogInfo を介して情報をプッシュする多くのライブラリを使用します。LibC が新しい ILogInfo をプッシュするとき、呼び出し元のモジュールのみが情報をキャッチ (観察) したいと考えています。たとえば、呼び出しがモジュール B から来た場合、モジュール A によって監視される情報がわかりません。どうすればよいですか?

4

2 に答える 2

1

これは実際には Rx に関する質問ではありません。適切にルーティングするには、ILogInfo から呼び出しコンテキストを取得できる必要があります。

呼び出し元からそのコンテキストを明示的に提供するか (コメントの送信者の提案は、これの単純で実行可能な提案のようです)、呼び出しモジュールを決定するために高価なスタックウォークを実行するか (非同期の状況では機能しません)、またはその他の方法で提供できます。LogicalCallContextでデータを設定することにより、ExecutionContext で呼び出し元を維持する必要があります。これは、より非同期の状況で機能しますが、より複雑です。

あなたの特定の状況についてはわかりませんが、ロギングを完全に分離する必要があることを考えると、ライブラリの複数のコピーを個別のモジュールごとの AppDomains でホストする方が簡単で、完全に分離できるのではないかと思います。

既存のロギング フレームワークがコンテキストを提供するための優れたソリューションを備えている場合 (たとえば、ロギング アプリケーション ブロックや WCF でのアクティビティ トレースなど) は非常に複雑に感じられるため、この要件には十分な理由があることを願っています。

于 2013-10-16T10:27:28.580 に答える