Sind statische Klassen auf einer ASP.NET-Website für jede Webanforderung eindeutig oder werden sie bei Bedarf instanziiert und bei jeder Entscheidung des GC, sie zu entsorgen, überprüft?
Der Grund, den ich frage, ist, dass ich zuvor einige statische Klassen in C # geschrieben habe und das Verhalten anders ist, als ich erwartet hätte. Ich hätte erwartet, dass statische Klassen für jede Anforderung eindeutig sind, aber das scheint nicht der Fall zu sein.
Wenn sie nicht für jede Anfrage eindeutig sind, gibt es eine Möglichkeit, dies zuzulassen?
UPDATE:
Die Antwort, die driis mir gab, war genau das, was ich brauchte. Ich habe bereits eine Singleton-Klasse verwendet, jedoch eine statische Instanz, und wurde daher von Anforderungen gemeinsam genutzt, auch wenn die Benutzer unterschiedlich waren, was in diesem Fall eine schlechte Sache war. Die Verwendung HttpContext.Current.Items
löst mein Problem perfekt. Für alle, die in Zukunft auf diese Frage stoßen, ist hier meine Implementierung, vereinfacht und verkürzt, damit das Muster leicht zu verstehen ist:
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(...)
Hinweis : Wenn Sie Ihre Anfrage beispielsweise umleiten, verlieren Sie Ihre Artikel, weil ein neuer HttpContext erstellt wird. Weitere Details hier: stackoverflow.com/questions/16697601/…