c#MVCとSimple Injectorを使用。シンプルインジェクタで構築したときにセッションIDをロガーに追加
マイロガーはそのように作成されます。
container.Register<ILogger>(() => new Logger("MVC Logging Startup"), Lifestyle.Scoped);
これは完全に必要なすべてのクラスに渡されます。しかし、私はユーザーに発生するイベントを特定する方法が必要です。私の考えでは、これを実装する最も簡単な方法はsessionIdをロガーに渡すことです。そうすれば、ロガーを使用するクラス、コントローラー、ビジネスクラス、データ処理クラスのいずれでも、個々のセッションイベントを追跡できます。 HttpContext
がnull
あるアプリケーション起動時のよう
container.Register<ILogger>(() => new Logger(this.Session.SessionId), Lifestyle.Scoped);
は動作しません。私がこれを行うために見ることができる唯一の方法はコントローラのコンストラクタが呼び出されるたびに手動でsessionId
をロガーに設定することです。しかし、それは直観に反しているようです。では、現在のSessionId
(または一意の識別子)を自分のロガーに渡すにはどうすればいいですか?
あなたはグローバルな[アクションフィルタ](HTTPSを登録することができますが://msdn.microsoft.com/en-us/library/gg416513%28VS.98%29.aspx)アクションが実行される前に実行されます( 'OnActionExecuting') –
ありがとうStron。他の答えが好きなのは、私の解決策の残りの仕組みに沿っているからです。 – Matt