Czy w witrynie ASP.NET klasy statyczne są unikalne dla każdego żądania WWW, czy też są tworzone w razie potrzeby, a GCed za każdym razem, gdy GC zdecyduje się je usunąć?
Powodem, dla którego pytam, jest to, że napisałem już kilka klas statycznych w języku C #, a zachowanie jest inne niż się spodziewałem. Spodziewałbym się, że klasy statyczne będą unikalne dla każdego żądania, ale tak nie jest.
Jeśli nie są one unikalne dla każdego żądania, czy istnieje sposób, aby im to umożliwić?
AKTUALIZACJA:
Driis odpowiedział mi dokładnie to, czego potrzebowałem. Korzystałem już z klasy singleton, jednak korzystałem z instancji statycznej i dlatego byłem współdzielony między żądaniami, nawet jeśli użytkownicy byli różni, co w tym przypadku było złe. Używanie HttpContext.Current.Items
doskonale rozwiązuje mój problem. Dla każdego, kto natknie się na to pytanie w przyszłości, oto moja implementacja, uproszczona i skrócona, aby łatwo zrozumieć wzór:
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(...)
stracisz swoje przedmioty, ponieważ zostanie utworzony nowy HttpContext. Więcej szczegółów tutaj: stackoverflow.com/questions/16697601/…