ASP.NET单例类如何确保每个请求仅创建一个实例?

2026-03-30 12:451阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计397个文字,预计阅读时间需要2分钟。

ASP.NET单例类如何确保每个请求仅创建一个实例?

pythonclass UserContext: def __init__(self, user_id): self.user_id=user_id

在Windows窗体应用程序中,可以这样使用:class FormApp: def __init__(self): self.user_context=UserContext(123456)

def some_method(self): print(User ID:, self.user_context.user_id)

我有一个名为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

可能会议状态是更好的选择吗?

ASP.NET单例类如何确保每个请求仅创建一个实例?

缓存和会话状态都存在回发 – 是否有另一个选项随每个新请求重置?

谢谢你的帮助!

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

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

本文共计397个文字,预计阅读时间需要2分钟。

ASP.NET单例类如何确保每个请求仅创建一个实例?

pythonclass UserContext: def __init__(self, user_id): self.user_id=user_id

在Windows窗体应用程序中,可以这样使用:class FormApp: def __init__(self): self.user_context=UserContext(123456)

def some_method(self): print(User ID:, self.user_context.user_id)

我有一个名为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

可能会议状态是更好的选择吗?

ASP.NET单例类如何确保每个请求仅创建一个实例?

缓存和会话状态都存在回发 – 是否有另一个选项随每个新请求重置?

谢谢你的帮助!

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

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