1

通常情況下,當我們需要將當前應用程序狀態的基準,我們可以使用:訪問HttpApplicationState那裏有沒有可用的當前HttpContext

HttpContext.Current.Appliction 

但是有次,有沒有當前HttpContext(HttpContext.Current回報null )。在這種情況下,我如何獲得對當前應用程序實例的引用?

一個示例可以在Session_End事件中。雖然我可以在Session_End事件處理程序中使用Application屬性,但如果處理程序調用庫方法並且在庫代碼中需要HttpApplicationState對象,該怎麼辦?我不喜歡通過一個「應用程序」參數...

我也不喜歡保持它在static字段(如Singleton模式),我正在尋找一種方法,直接從它上下文。

是否有任何方式直接訪問實例(類似於HttpContext.Current.Application的方法)還是我必須選擇上述不那麼幹淨的方法之一?

+0

我知道當你有通用處理程序頁面(IHttpHandler)時,你可以實現IRequiresSessionState來使狀態可用。 – ToddBFisher 2013-04-04 00:07:22

+0

在我看來,在這種情況下沒有任何關於使用靜態/單例模式的不清楚。事實上,我會鼓勵它。 – 2013-04-04 00:24:33

+0

@Moby我沒有任何反對它的硬性論據,但我希望像'HttpContext.Current'那樣乾淨獨立。考慮一下我正在編寫一個需要訪問應用程序的庫代碼,另一個人想要使用它。如果我定義Singleton,他仍然需要爲我填充它。如果他定義它,我將無法訪問它。在這種情況下,最好的方法是編寫一個模塊並讓他註冊。將它與HttpContext.Current比較...如果框架給了我們一些選擇,它「可能」會更容易和更清晰。 – Iravanchi 2013-04-04 00:30:46

回答

1

我會使用HttpRuntime.Cache而不是應用程序狀態對象。可以從任何地方使用HttpRuntime.Cache