We are using an in house simple Logger class for our application's logging tasks (.NET 3.5).

The logger code is pretty old, and is designed similarly to this:

```
public class Logger : ILogger
{
     private ILogger instance;

     private static ILogger Instance
     { 
         // Initialized on first use.
         get { return instance; }
     }

     public static void Debug(string msg)
     {
           instance.Debug(msg);
     }

     public static void Error(string msg)
     {
           ....
     }
}

```

The instance itself is being initialized on first usage (lazily).

This is not a Singleton according to its strict "by the book" implementation, but nonetheless, the access to this class from all calling code is a ***static access***.

I would like, for testing purposes and for other architectural reasons, to be able to replace the internal *instance* with something else (inject it).

How can i achieve this easily? we are not using any IoC container at the moment, but i would not want to expose a setter to the Instance property since that would defeat the whole Singleton like design.

Any suggestions on how to come up with a solution for this?