當我在ASP.NET應用程序中創建一個單例時,究竟是「範圍」? 內存中的單例實例是否可能被來自不同IP的多個請求使用?單身人士 - 他們如何使用ASP.NET?
即John通過表單將信息放入單例中,然後Susie進來並將信息放入單例中。 John和Susie是否可能將信息存儲到同一實例中?
當我在ASP.NET應用程序中創建一個單例時,究竟是「範圍」? 內存中的單例實例是否可能被來自不同IP的多個請求使用?單身人士 - 他們如何使用ASP.NET?
即John通過表單將信息放入單例中,然後Susie進來並將信息放入單例中。 John和Susie是否可能將信息存儲到同一實例中?
是的。所有用戶都可以在整個應用程序中共享ASP.net中的靜態變量。也要小心靜態構造函數,因爲它們也只運行一次。
微軟知識庫文章,Troubleshooting ASP.NET applications with the use of static keywords (893666)
如果你需要「每用戶靜態變量」,會話或HttpContext.Items可能是你所需要的。
Joshua說singleton - 但沒有表明靜態或其他 - 沒有這個信息的範圍未知 - 例如他的「單身」可能是靜態方法支持HttpContext.Items – stephbu 2011-03-17 20:29:12
@stephbu出於興趣,如何在沒有靜態的情況下在.net中實現Singleton?將實例對象序列化到外部存儲?或者我錯過了什麼? – 2011-03-17 20:31:18
「singleton」只是從範圍/容器的角度來看 - 例如即使是靜態的 - 他們在appdomain的上下文中也只是單例。我不懷疑靜態是在appdomain範圍內創建單身人士的好方法,我強調我們不知道範圍。 – stephbu 2011-03-17 20:35:28
假設你正在製作一個刻板的Singleton(你將在面向狀態的環境中看到的實現),那就意味着你的單例將在整個應用程序和所有用戶之間共享。
靜態項目存儲在服務器內存中,但不是基於每個用戶。您需要爲該場景使用類似Session的內容。
我們需要更多的實施信息來幫助我們確定正確的答案。它取決於創建單例引用的範圍 - 例如一個靜態成員 - 是幾乎肯定是相同的實例。 HttpContext.Items,幾乎可以肯定沒有。 – stephbu 2011-03-17 20:28:09