gpt4 book ai didi

c# - 单例和 HttpApplicationState

转载 作者:太空狗 更新时间:2023-10-29 18:28:22 25 4
gpt4 key购买 nike

在 Web 应用程序中,我只需要一个名为 ProcessManager 的类的实例。一种方法是使其成为单例。另一种方法是使用 HttpApplicationState 来确保我始终访问同一个实例,如下所示:

public static ProcessManager ProcessManager
{
get
{
HttpApplicationState applicationState = HttpContext.Current.Application;
if (applicationState["ProcessManager"] == null)
{
applicationState["ProcessManager"] = new ProcessManager();
}

return (ProcessManager)applicationState["ProcessManager"];
}
}

哪种方法更好,为什么?

最佳答案

根据您给出的有限描述,我会选择 Singleton,因为这样它就不会依赖于 HttpContext.Current,并且可以在 ASP.Net 管道之外使用(例如,当您想写单元测试。)

(顺便说一句,当您将某些内容设置到 ApplicationState 中时,您还需要先对其调用 Lock(),然后在完成写入后对其进行 Unlock(),以确保它是线程安全的。)

或者,在创建 ProcessManager 时允许注入(inject) HttpContext,这样您就可以将它与模拟的 HttpContext 一起使用。

关于c# - 单例和 HttpApplicationState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2179923/

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