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

10-10 06:59