我有一个名为UserContext的类,它跟踪我网站上给定用户的活动.它应该是一个单例类(每个用户只有一个实例).在 Windows窗体应用程序中,我可以写这样的东西: Class UserContext Public Shared Curre
Class UserContext Public Shared Current As New UserContext() Private Sub New(appName As String) [...] End Class
但是在ASP.net应用程序上,这将在所有当前用户之间共享.
如果这个类只在一个Page实体中使用,我可以将UserContext实例存储在一个Page变量中 – 它不一定需要在回发中存活.但是其他实体(不了解Page)也调用UserContext,我希望它们都被赋予相同的实例.
我该怎么做才能确保每个http请求(或每个用户)只实例化一次类?我可以使用缓存吗?
Public Shared Function GetContext() As UserContext If HttpContext.Current.Cache("CurrentUserContext") Is Nothing Then HttpContext.Current.Cache("CurrentUserContext") = New UserContext() Return HttpContext.Current.Cache("CurrentUserContext") End Function
可能会议状态是更好的选择吗?
缓存和会话状态都存在回发 – 是否有另一个选项随每个新请求重置?
谢谢你的帮助!
HttpContext.Current.Cache将在所有用户之间共享. HttpContext.Current.Session是每个用户,但后续请求仍然存在.你需要HttpContext.Current.Items:
Public Shared Function GetContext() As UserContext If HttpContext.Current.Items("CurrentUserContext") Is Nothing Then HttpContext.Current.Items("CurrentUserContext") = New UserContext() Return HttpContext.Current.Items("CurrentUserContext") End Function
这将确保每个请求和每个用户缓存存储的安全性.