Okay, now we will use Ninject for our singleton pattern.
If you use Ninject you need not to add code for locking down your class to achieve a singleton behavior. You only have to tell Ninject that the class type should be tied to some implementation, in our example to itself. Furthermore, you have to setup the – what they call – Activation Behavior. In our Example it is,…. yes the InSingletonScope.

Ninject distinguishes between 4 (build-in) scopes:

Transient

.InTransientScope()

A new instance of the type will be created each time one is requested. (This is the default scope)

Singleton

.InSingletonScope()

Only a single instance of the type will be created, and the same instance will be returned for each subsequent request.

Thread

.InThreadScope()

One instance of the type will be created per thread.

Request

.InRequestScope()

One instance of the type will be created per web request, and will be destroyed when the request ends.

The first step would be to create a new NinjectModule which will hold the bindings.