加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.net:单例类,每个请求只实例化一次?

发布时间:2020-12-16 09:23:00 所属栏目:asp.Net 来源:网络整理
导读:我有一个名为UserContext的类,它跟踪我网站上给定用户的活动.它应该是一个单例类(每个用户只有一个实例).在 Windows窗体应用程序中,我可以写这样的东西: Class UserContext Public Shared Current As New UserContext() Private Sub New(appName As String)
我有一个名为UserContext的类,它跟踪我网站上给定用户的活动.它应该是一个单例类(每个用户只有一个实例).在 Windows窗体应用程序中,我可以写这样的东西:

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

这将确保每个请求和每个用户缓存存储的安全性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读