在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# - Singleton和HttpApplicationState,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2179923/