C# でのメソッド呼び出しをインターセプトするためにサードパーティのライブラリを使用しないでください
外部ライブラリを使用せずに C# でメソッド呼び出しをインターセプトする方法はいくつかありますが、どれも簡単ではありません。考慮すべき 2 つのオプションを以下に示します:
は、MarshalByRefObject
または ContextBoundObject
からターゲット クラスを継承し、IMessageSink
から継承したプロパティを定義します。このプロパティを変更して、メソッド呼び出しをインターセプトし、適切なロギング メソッドを呼び出します。ただし、このアプローチはパフォーマンスに重大な影響を与える可能性があります。
リフレクションを使用して、クラスを検査し、プロパティを取得し、既存のメソッドにコードを挿入します。これにはリフレクションについての深い理解が必要ですが、Reflection.Emit
の制限により実行可能または信頼できない場合があります。あるいは、CLR コンパイラの拡張機能の使用を検討することもできますが、これには C# 開発者が通常持っていない専門知識が必要です。
呼び出しメソッドを使用して変更されたソリューションの一部:
Caller.Call
メソッドの変更が許可されている場合、ソリューションはより管理しやすくなります。インターセプト プロキシを使用するか、Traced
と同じインターフェイスを実装する新しいクラスを作成することにより、元のクラスに委任する前にメソッド呼び出しをインターセプトし、必要なログを実行することができます。このアプローチでは、ある程度のリファクタリングが必要ですが、C# の AOP の複雑さを回避できます。
以上が外部ライブラリを使用せずに C# でメソッド呼び出しをインターセプトするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。