2011-03-19 67 views
2

我有一個類,繼承自IDependency。從我的課程訪問HttpContext的最佳方式是什麼?我希望儘可能早地訪問它,一旦HttpContext變得可用。從請求範圍類訪問HttpContext

我試圖IWorkContextAccessor添加依賴注入上我的課,並從構造訪問它,但的getContext()回報然後。

回答

1

當前HttpContext通過IWorkContextAccessor對象後的IoC容器對象生成,所以您將無法訪問那些在構造函數中是可用的。最好的方法是在你想使用它的時候訪問上下文對象 - 不是更早 - 尤其是構造函數中的而不是,因爲構造函數很早就被Autofac調用。

您也可以注入IOrchardServices對象(姑且稱之爲「服務」)然後用services.WorkContext.HttpContext對象。

你能提供一些你想要達到的更多細節嗎?你爲什麼要這麼早就訪問它?難道這不能被重寫,所以上下文對象將在以後使用(例如在某些方法調用中)?

HTH

+0

讓我來分析一下我正在嘗試做什麼。我正在自定義** DefaultCultureManager **類。目的是將文化選擇邏輯從** GetCurrentCulture **方法移動到另一個私有方法,當** HttpContext **變爲可用時,該方法將僅被調用一次。原因是因爲** GetCurrentCulture **方法被頻繁調用。 我查找了某種類型的組件,它聚合了應用程序級別的事件,如** BeginRequest **,以及可以從** DefaultCultureManager **訪問的組件,但沒有發現任何內容。 – 2011-03-21 10:47:17

+1

因此,您希望在每次調用** GetCurrentCulture **方法時儘量減少檢索當前文化的性能影響?我想最好的選擇(就清晰度和最佳實踐而言)是使用緩存(通過** ICacheManager **)。第一次調用方法時,將在隨後的調用中創建並檢索緩存。 Afaik沒有簡單的方法來連接到「生命週期」事件,但我想團隊會在這方面工作(這種功能的必要性曾被提及過幾次)。 – 2011-03-21 14:11:34

+0

非常好的解釋,爲我節省了很多時間。 – 2015-03-04 08:20:06