0
使用c#MVC和Simple Injector。通過Simple Injector構建時,將SessionId添加到Logger
我的記錄器是這樣創建的;
container.Register<ILogger>(() => new Logger("MVC Logging Startup"), Lifestyle.Scoped);
而且這被傳遞到所有需要它的類。但是,我需要一種識別發生在用戶身上的事件的方式。在我看來,最簡單的實現方法是將sessionId傳入記錄器,這樣每次使用記錄器的類,無論是控制器,業務類還是數據處理類,都可以跟蹤單個會話事件。
container.Register<ILogger>(() => new Logger(this.Session.SessionId), Lifestyle.Scoped);
將無法正常工作,在應用程序啓動時HttpContext
是null
。我能看到的唯一方法是在每次調用控制器構造函數時手動將sessionId
設置到記錄器中。但這似乎是違反直覺的。那麼如何將當前的SessionId
(或唯一標識符)傳遞到我的記錄器中。
您可以註冊一個全球性的[操作過濾器(HTTPS
如下這樣可以實現://msdn.microsoft.com/en-us/library/gg416513%28VS.98%29.aspx)它將在執行動作之前執行('OnActionExecuting') –
感謝Stron。我更喜歡其他答案,因爲它與我的解決方案的其餘部分一致。 – Matt