title: C# Singleton with constructor that accepts parameters
body: <p>I want to create a static class or singleton class that accepts a reference to another object in its constructor. Static classes are out, but I figured I could create a singleton that accepts parameters in its constructor. So far I haven't had any luck figuring out or googling the syntax. Is this possible? if so, how do I do it? </p>
  
  <p>Sorry for no example in the initial post, I wrote it in a rush. I have the feeling that my answer is already in the replies, but here's some clarification of what I want to do:</p>
  
  <p>I want to create a single instance of a specific type (said Singleton), but that single instance of the type needs to hold a reference to a different object. </p>
  
  <p>For example, I might want to create a Singleton "Status" class, which owns a StringBuilder object and a Draw() method that can be called to write said StringBuilder to the screen. The Draw() method needs to know about my GraphcisDevice in order to draw.
  So what I want to do it this:</p>
  
  <pre><code>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
      }
  }  
  </code></pre>
  
  <p>All over the code, I retrieve my Status Singleton and call its UpdateMessage() method.</p>
  
  <pre><code>private Status _status = Status.Instance; // + pass reference to GraphicsDevice
  _status.UpdateMessage("Foo!");
  </code></pre>
  
  <p>Then, in my main class I also retrieve the singleton, and draw it:</p>
  
  <pre><code>_status.Draw();
  </code></pre>
  
  <p>Yes, this means that wherever I retrieve the singleton, I need to do so by passing in the reference to the GraphicsDevice, in case it's the first time I instantiate the Singleton. And I could/would use different means to retrieve something as fundamental as the GraphicsDevice in my Singleton class, for example register a service elsewhere and get that service in the Status class. This example got pretty contrived - I'm trying to figure out if <em>something</em> like this pattern is possible in the first place.</p>