Bir ASP.NET web sitesinde, statik sınıflar her web isteğine özgüdür veya gerektiğinde somutlaştırılır ve GC bunları atmaya karar verdiğinde GC'lenir mi?
Sormamın nedeni, daha önce C # 'da bazı statik sınıflar yazdım ve davranış beklediğimden farklı. Statik sınıfların her istek için benzersiz olmasını beklerdim, ama durum böyle görünmüyor.
Her bir istek için benzersiz değilse, bu isteklere izin vermenin bir yolu var mı?
GÜNCELLEME:
Bana verilen cevap tam olarak ihtiyacım olan şeydi. Zaten tek bir sınıf kullanıyordum, ancak statik bir örnek kullanıyordu ve bu nedenle, bu durumda kötü bir şey olan kullanıcılar farklı olsa bile istekler arasında paylaşılıyordu. Kullanımı HttpContext.Current.Items
problemimi mükemmel bir şekilde çözer. Gelecekte bu soru üzerine tökezleyen herkes için, benim deseni, anlaşılması kolay olacak şekilde basitleştirilmiş ve kısaltılmış benim uygulama:
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(...)
yeni bir HttpContext oluşturulacağı için öğelerinizi kaybedersiniz. Daha fazla ayrıntı için: stackoverflow.com/questions/16697601/…