Trên một trang web ASP.NET, các lớp tĩnh là duy nhất cho mỗi yêu cầu web, hoặc chúng được khởi tạo bất cứ khi nào cần thiết và được cấp phép bất cứ khi nào GC quyết định loại bỏ chúng?
Lý do tôi hỏi là vì tôi đã viết một số lớp tĩnh trước đó trong C # và hành vi khác với những gì tôi mong đợi. Tôi đã dự kiến các lớp tĩnh là duy nhất cho mỗi yêu cầu, nhưng có vẻ như đó không phải là trường hợp.
Nếu chúng không phải là duy nhất cho mỗi yêu cầu, có cách nào để cho phép chúng được không?
CẬP NHẬT:
Câu trả lời Driis cho tôi là chính xác những gì tôi cần. Tôi đã sử dụng một lớp singleton, tuy nhiên nó đang sử dụng một thể hiện tĩnh và do đó được chia sẻ giữa các yêu cầu ngay cả khi người dùng khác nhau, trong trường hợp này là một điều xấu. Sử dụng HttpContext.Current.Items
giải quyết vấn đề của tôi một cách hoàn hảo. Đối với bất kỳ ai vấp phải câu hỏi này trong tương lai, đây là cách triển khai của tôi, được đơn giản hóa và rút ngắn để dễ hiểu mô hình:
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(...)
bạn sẽ mất các mục của mình vì một HTTPContext mới sẽ được tạo. Thêm chi tiết tại đây: stackoverflow.com/questions/16697601/