Tôi gặp sự cố với mẫu Singleton.C# Nhiều trường hợp của một đối tượng Singleton
Thật kỳ lạ, nhưng có vẻ như có hai hoặc ba trường hợp Mẫu Singleton của tôi. Trang web của tôi, là trang web hành động, có tính giờ và tôi đang xử lý các bộ tính giờ và giá đó với đối tượng Singleton của tôi.
Điều đang xảy ra là một số người thấy một số giá và những người khác nhìn thấy giá khác luôn khi họ ở trong các mạng khác nhau. Ví dụ, Trong văn phòng của tôi, người của tôi thấy một số cuộc đấu giá ở mức 0,56 cent, mọi người đều thấy như nhau, nhưng trong một mạng khác, ví dụ, nhà của tôi, tôi thấy 0,55 cent và đồng hồ cũng có giá trị khác nhau.
Có nói điều này, tôi đã thử nghiệm Singleton của tôi, bằng cách tạo ra một GUID và đăng nhập nó trong tệp nhật ký của tôi. Dưới đây là một số mã
public class Singleton
{
private static Singleton instance;
private static System.Threading.Mutex mutex;
System.Guid token;
private Singleton() {
token = System.Guid.NewGuid();
Logger.Log("New singleton Instance" + token.toString());
}
static Singleton()
{
instance = new Singleton();
mutex = new System.Threading.Mutex();
}
public static Singleton Acquire()
{
mutex.WaitOne();
return instance;
}
// Each call to Acquire() requires a call to Release()
public static void Release()
{
mutex.ReleaseMutex();
}
public void SomeAction()
{
Logger.Log(token.toString() + " - SomeAction");
}
}
Trong mã này, tôi tạo ra các mã thông báo các nhà xây dựng, và đăng nhập tạo ra một Singleton mới, sau đó ... trong phương pháp SomeAction
, tôi đăng nhập người đang làm hành động đó.
Sau đó, chúng tôi đã thực hiện một vài thử nghiệm và tải xuống tệp nhật ký.
Trước sự ngạc nhiên của tôi, tôi chỉ thấy một "Singleton Instance bla mới" là chính xác. nhưng sau đó, nhiều cuộc gọi đến phương thức SomeAction
với các GUID khác nhau, điều này thật kỳ lạ.
Tôi đã kiểm tra đối tượng đó chỉ được tạo trong hàm dựng tĩnh và tôi cũng đã kiểm tra rằng không có tạo thủ công ở bất kỳ đâu.
Để biết thêm thông tin, điều này chỉ xảy ra trên máy chủ sản xuất của tôi, lưu trữ goDaddy. Tôi đã hỏi nếu có nhiều hơn một hồ bơi ứng dụng cho trang web của tôi và họ nói rằng chỉ có một ứng dụng Pool.
Hãy thử triển khai singleton của bạn như được đề xuất [ở đây] (http://csharpindepth.com/Articles/General/Singleton.aspx). –
tôi đã suy nghĩ tại sao bạn đã tạo ra constructor tĩnh? – FosterZ
Có thể bạn có thể chẩn đoán sự cố bằng cách sử dụng tính năng Ghi nhật ký vứt bỏ và thêm Thử Bắt ở mọi nơi. Chúc may mắn. – CodingBarfield