Tôi muốn tạo một lớp tĩnh hoặc lớp singleton chấp nhận tham chiếu đến đối tượng khác trong hàm tạo của nó. Các lớp tĩnh nằm ngoài, nhưng tôi đã hình dung rằng tôi có thể tạo một singleton chấp nhận các tham số trong hàm khởi tạo của nó. Cho đến nay tôi đã không có bất kỳ may mắn tìm ra hoặc googling cú pháp. Điều này có thể không? nếu vậy, làm thế nào để làm điều đó?C# Singleton với hàm tạo chấp nhận tham số
Xin lỗi vì không có ví dụ nào trong bài đăng đầu tiên, tôi đã viết vội vàng. Tôi có cảm giác rằng câu trả lời của tôi đã có trong câu trả lời, nhưng đây là một số làm rõ những gì tôi muốn làm:
Tôi muốn tạo một cá thể đơn lẻ (Singleton), nhưng loại cần giữ một tham chiếu đến một đối tượng khác.
Ví dụ: tôi có thể muốn tạo lớp "Trạng thái" Singleton, lớp này sở hữu đối tượng StringBuilder và phương thức Draw() có thể được gọi để viết StringBuilder cho màn hình. Phương thức Draw() cần biết về GraphcisDevice của tôi để vẽ. Vì vậy, những gì tôi muốn làm điều đó này:
public class Status
{
private static Status _instance;
private StringBuilder _messages;
private GraphicsDevice _gDevice;
private Status(string message, GraphicsDevice device)
{
_messages.Append(message);
_gDevice = device;
}
// The following isn't thread-safe
// This constructor part is what I'm trying to figure out
public static Status Instance // (GraphicsDevice device)
{
get
{
if (_instance == null)
{
_instance = new Status("Test Message!", device);
}
return _instance;
}
}
public void UpdateMessage
...
public void Draw()
{
// Draw my status to the screen, using _gDevice and _messages
}
}
Khắp mã, tôi lấy Tình trạng của tôi Singleton và gọi phương thức của nó UpdateMessage().
private Status _status = Status.Instance; // + pass reference to GraphicsDevice
_status.UpdateMessage("Foo!");
Sau đó, trong lớp học chính của tôi, tôi cũng lấy singleton, và vẽ nó:
_status.Draw();
Vâng, điều này có nghĩa rằng bất cứ nơi nào tôi lấy singleton, tôi cần phải làm như vậy bằng cách đi qua trong tham chiếu đến GraphicsDevice, trong trường hợp đó là lần đầu tiên tôi khởi tạo Singleton. Và tôi có thể sử dụng các phương tiện khác nhau để lấy một thứ gì đó cơ bản như GraphicsDevice trong lớp Singleton của tôi, ví dụ như đăng ký một dịch vụ ở nơi khác và nhận dịch vụ đó trong lớp Trạng thái. Ví dụ này đã khá giả tạo - Tôi đang cố gắng tìm hiểu xem có phải điều gì đó như mẫu này có thể thực hiện được không.
Đã thêm giải thích tốt hơn về những gì tôi đã hỏi. –