gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:07:31 24 4
gpt4 key购买 nike

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

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

缓存和 session 状态都可以在回发后保留下来 - 是否有另一个选项可以根据每个新请求重置?

感谢您的帮助!

最佳答案

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

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

关于ASP.net:单例类,每个请求仅实例化一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7261280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com