Tôi có một câu hỏi về Singletons chạy trong IIS (6,7,7,5) và ASP.NET 4.0 Web Application (ứng dụng MVC3 là cụ thể).Singleton đang chạy trên các ứng dụng web Asp.Net
Tôi có một đối tượng đơn lẻ trong dự án của tôi được truy cập và sử dụng trong global.ascx, trên application_start, cũng như một vài địa điểm khác trong ứng dụng.
Mối quan tâm của tôi là, singleton này cần phải truy cập được ở mỗi trường hợp mẫu. Tuy nhiên, vì IIS về cơ bản là quá trình lưu trữ, là singleton sẽ là cùng một đối tượng trên tất cả các trường hợp của ứng dụng?
Nếu tôi sử dụng từ khóa [ThreadStatic], nó có tách biệt ở cấp ứng dụng Pool Pool không?
Cuối cùng, có cách nào không, tôi có thể đảm bảo một singleton chỉ là một singleton cho mỗi ứng dụng của tôi. tức là nếu tôi chạy ứng dụng của tôi trên 1 trang web, nhưng bên trong 5 thư mục ảo, có 5 phiên bản của singleton hoặc nếu tôi chạy trang web của tôi trên 5 trang web khác nhau trong cùng một hồ bơi ứng dụng.
Hy vọng điều đó đủ rõ ràng, trong trường hợp bạn muốn xem đối tượng đơn lẻ, tôi dán ý tưởng chung về nó bên dưới.
public sealed class Singleton : IDisposable
{
[ThreadStatic]
private static volatile Singleton _instance;
[ThreadStatic]
private static readonly object _syncRoot = new object();
public bool IsReleased { get; private set; }
public Singleton()
{
IsReleased = false;
}
public static Singleton Instance
{
get
{
if (_instance == null)
{
lock (_syncRoot)
{
if (_instance == null)
_instance = new Singleton();
}
}
return _instance;
}
}
public void Dispose()
{
IsReleased = true;
Singleton._instance = null;
}
}
Tôi vẫn còn bối rối. Bạn có biết nó hoạt động như thế nào hay không? Bạn có thể làm cho câu hỏi rõ ràng hơn một chút không? – jcolebrand
Tôi biết làm thế nào một singleton "hoạt động" ở mức cho mỗi quá trình. Câu hỏi đặt ra là làm thế nào IIS sẽ xử lý nó trên nhiều trường hợp của ứng dụng của tôi. – John
Chỉ vì tò mò, tại sao đơn vị của bạn dùng một lần? Bạn có mong đợi có khoảng thời gian mà bạn muốn nó được xử lý, và sau đó hồi sinh lại khi ai đó yêu cầu nó? Các singletons thực sự thường không được xử lý cho đến khi ứng dụng chấm dứt. – StriplingWarrior