私のアプリのすべてのクラスで使用されるユーティリティ(例えば、ロガー)があるとします。 Loggerを使用するクライアントタイプに関する情報を保存できるようにします。つまり、StockProvider
がメッセージを記録する場合、ログメッセージにはログメッセージと共にStockProvider
クラス名を追加する必要があります。そしてStockProvider
ので、それはその方法でロガーを使用することができますクライアントに関する情報を依存関係に渡す
public StockProvider (ILogger logger) {}
のようにコンストラクタを介して渡されたロガーを持っています。 logger.Log (GetType(), msg)
のように、ロガーが使用されるたびに型情報が渡されるのが最も簡単です。私が望むのは、loggerメソッドにその型情報を渡さずに、そのクライアント型情報をその状態にして、Log
を呼び出すとメッセージに型名が追加されるということです。例えば。
class Logger : ILogger {
public Logger (Type clientType) {
this.type = clientType;
}
public void Log(string msg)
{ Console.WriteLine(this.type.FullName + msg); }
}
のようなコンストラクタでそれを渡すとStockProvider
の内側のように働くだろう、私はちょうどそこで質問がある
logger.Log (msg)
を言うことができる:私はそれを受け取るよう一般的な方法でLogger
を登録することができていますクライアントのclientType
がStockProvider
か他のクライアントタイプのどちらであるかをログに記録しますか? ロガーはコード内で広く使用されているクラスの例として使用されています。
public interface ILogger<T> where T: class
{
void Log(string message, LogLevel level);
}
public class Logger<T> : ILogger<T>
where T: class
{
public void Log(string message, LogLevel level)
{
WriteLog(typeof(T).Name + ": " + message, level);
}
}
そして今、あなたはあなたの中にの一般的な実装を登録する必要があります。それはまた、あなたが好きな汎用的なロガーを作成することができますイベント
クール。実際に私はそのようなアプローチについて考えましたが、タイプパラメータなしで逃げることができるかどうか疑問に思っていました。それが問題の全体のポイントです。とにかく、提案のおかげで - きちんとした解決策! – patryk