Sur un site Web ASP.NET, les classes statiques sont-elles uniques à chaque requête Web, ou sont-elles instanciées chaque fois que nécessaire et GC chaque fois que le GC décide de les éliminer?
La raison pour laquelle je pose la question est que j'ai déjà écrit des classes statiques en C # et que le comportement est différent de ce à quoi je m'attendais. Je me serais attendu à ce que les classes statiques soient uniques à chaque requête, mais il ne semble pas que ce soit le cas.
S'ils ne sont pas uniques à chaque demande, y a-t-il un moyen de les autoriser?
MISE À JOUR:
La réponse que driis m'a donnée était exactement ce dont j'avais besoin. J'utilisais déjà une classe singleton, mais elle utilisait une instance statique et était donc partagée entre les demandes même si les utilisateurs étaient différents, ce qui dans ce cas était une mauvaise chose. L'utilisation HttpContext.Current.Items
résout parfaitement mon problème. Pour tous ceux qui tombent sur cette question à l'avenir, voici mon implémentation, simplifiée et raccourcie pour qu'il soit facile de comprendre le modèle:
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(...)
vous perdrez vos éléments car un nouveau HttpContext sera créé. Plus de détails ici: stackoverflow.com/questions/16697601/…