在ASP.NET网站上,是每个Web请求唯一的静态类,还是在GC决定处置它们时随时需要GC和GC进行实例化?ASP.NET中的请求或服务器是静态类实例吗?
我之所以这样问是因为我在C#编写之前一些静态类和行为是不同的,比我本来期望。我希望静态类对每个请求都是唯一的,但似乎并不是这样。
如果它们不是每个请求所特有的,有没有办法让它们成为?
更新:
答案驱动器给了我正是我所需要的。我已经使用了一个单例类,但它使用的是一个静态实例,因此即使用户不同,在这种情况下是不好的,也会在请求之间共享。使用HttpContext.Current.Items
完美解决了我的问题。对于任何人谁在将来出现此问题失蹄,这里是我的实现,简化和缩短,使得它很容易理解的模式:
using System.Collections;
using System.Web;
public class GloballyAccessibleClass
{
private GloballyAccessibleClass() { }
public static GloballyAccessibleClass Instance
{
get
{
IDictionary items = HttpContext.Current.Items;
if(!items.Contains("TheInstance"))
{
items["TheInstance"] = new GloballyAccessibleClass();
}
return items["TheInstance"] as GloballyAccessibleClass;
}
}
}
只是一个头:如果你重定向你的请求,比如说,用'filterContext.Result = new RedirectResult(...)`,你会失去你的项目,因为将会创建一个新的HttpContext。更多细节在这里:https://stackoverflow.com/questions/16697601/response-redirect-does-not-preserve-httpcontext-current-items – 2018-03-01 18:22:30