在 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/