ポリシーインジェクションアプリケーションブロックを使用したロギング
-
10-07-2019 - |
質問
こんにちはすべて
このような場合に、ポリシーインジェクションアプリケーションブロックを使用してメソッドの開始と終了をログに記録する方法をお聞きします:
Case1: Webフォームコントロールのイベントハンドラーをログに記録する場合、クラスは_Defaultがクラス System.Web.UI.Page から継承されなければならないことを知っています。 、したがって、 MarshalByRefObject クラスからクラスを継承できないため、ロギングは機能しません。
Case2: static クラスがあり、メソッドをログに記録する必要がある場合、 MarshalByRefObject からこのクラスを継承するためにできることstrong> calss、ログ機能を取得します。
解決
ログを適用できるようにするためのバカな要件があるように思えます... これはオフトピックかもしれませんが、MarshalByRefObjectから継承する必要なしにオブジェクトにロギングを適用するために、Spring.AOPフレームワークを見るとよいでしょう。 (複数の継承が切断された言語では、それは迷惑で抜本的な要件だと思います。)
他のヒント
ケース1については、ポリシーインジェクションブロックは、インターフェイスを持っているオブジェクトに対して動作できます。インターフェイスを念頭に置いて記述していなければ、Refactor-> Extract Interfaceアクションを使用してVisual Studioで簡単に実行できます。
ケース2については、「静的」クラスを実際に静的クラスにすることはできませんでした。 MarshalByRefObjectを継承するか、指定したインターフェイスを実装できます。その後、プライベートコンストラクターと、ポリシーを注入するシングルトンインスタンスを持つことができます。すべての静的メソッドは、クラスのシングルトンインスタンスで対応する(ポリシーが挿入された)インスタンスメソッドを呼び出すだけです。