Чи є на веб-сайті ASP.NET статичні класи унікальними для кожного веб-запиту, або вони інстанціюються, коли це потрібно, і GCed, коли GC вирішить їх утилізувати?
Причина, про яку я запитую, полягає в тому, що я писав кілька статичних класів раніше в C # і поведінка відрізняється, ніж я б очікував. Я б очікував, що статичні класи будуть унікальними для кожного запиту, але, схоже, це не так.
Якщо вони не є унікальними для кожного запиту, чи існує спосіб їх дозволити?
ОНОВЛЕННЯ:
Відповідь, яку мені дав дріс, було саме те, що мені потрібно. Я вже використовував однокласний клас, однак він використовував статичний екземпляр і тому ділився між запитами, навіть якщо користувачі були різними, що в цьому випадку було поганою справою. Використання HttpContext.Current.Items
вирішує мою проблему ідеально. Для кожного, хто натрапляє на це питання в майбутньому, ось моя реалізація, спрощена та скорочена, щоб легко зрозуміти викрійку:
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(...)
ви втратите свої предмети, оскільки буде створений новий HttpContext. Детальніше тут: stackoverflow.com/questions/16697601/…