Su un sito Web ASP.NET, le classi statiche sono univoche per ogni richiesta Web o sono istanziate ogni volta che è necessario e vengono GCedite ogni volta che il GC decide di eliminarle?
Il motivo per cui lo chiedo è perché ho scritto alcune classi statiche in C # e il comportamento è diverso da quello che mi sarei aspettato. Mi sarei aspettato che le classi statiche fossero uniche per ogni richiesta, ma non sembra che sia così.
Se non sono univoci per ogni richiesta, c'è un modo per permetterli?
AGGIORNAMENTO:
La risposta che driis mi ha dato era esattamente ciò di cui avevo bisogno. Stavo già utilizzando una classe singleton, tuttavia utilizzava un'istanza statica e quindi veniva condivisa tra le richieste anche se gli utenti erano diversi, il che in questo caso era una cosa negativa. L'uso HttpContext.Current.Items
risolve perfettamente il mio problema. Per chiunque si imbatti in questa domanda in futuro, ecco la mia implementazione, semplificata e abbreviata in modo che sia facile capire il modello:
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(...)
perderai i tuoi articoli perché verrà creato un nuovo HttpContext. Maggiori dettagli qui: stackoverflow.com/questions/16697601/…