2011-12-21 8 views
2

したがって、C#で.NETアセンブリを使用しています。バイナリとソースの両方にロガーがありません。 私が必要とするのは、特定のロガーを初期化するプロパティを挿入することだけです。それから私はすべてのメソッドでロガー呼び出しを導入する必要があります。最初の方法 - プロパティとその呼び出しを手動で書きます。そして2番目の方法は、自動的にそれを行う別のクラス\メソッド(私は同じアセンブリ内にあると思います)を書くことです。プログラムでアセンブリにコードを挿入する方法

可能ですか?助言がありますか?

インタビューの質問の1つだったと思います。しかし、これが可能であるという証拠はなく、彼らは「いいえ、これを手動で行う」と聞きたがりました。

+4

http://en.wikipedia.org/wiki/Aspect-oriented_programming –

答えて

2

これはアーキテクチャ上の用語で「クロスカッティングの問題」と呼ばれています。ロギングは、アプリケーションの多くの側面にまたがるものです。

Microsoftエンタープライズライブラリでは、それを処理する機能があります。必要な部分はPolicy Injectionライブラリです。設定では、(メソッド名/構造に基づいて)一致させるメソッドと呼び出す関数を指定できます。この方法では、すべてのメソッドに手動でコード化する必要があるものではなく、アプリの適切なクロスカッティングの問題としてログを含めることができます。

0

ソースコードを変更して再コンパイルすることなく、メソッドの実行を変更することはできません。最初にあなたのロガーを呼び出すメソッドとメソッドを公開するラッパークラスを書くことができますが、それは彼らが求めたものではありません。

質問に対する回答は可能です.2は不可能です。ログのサポートを追加する必要がある場合は、手動で各メソッドに追加する必要があります。

+0

これは、MicrosoftエンタープライズライブラリのPolicy Injectionセクションを使用して手動で各メソッドに追加することなく行うことができます。http://msdn.microsoft .com/ja-us/library/ff647463.aspx –

関連する問題