Question: I want to use Ninject in my Windows application and I want to know if there is best practices that I can do; strategies to find a balance between performance and maintenance.

The problem with Windows application and Web application is that in Web application, there is a scope easy to define that is the context but with Windows application, you have no scope that is easy to use form after form.

As example, I have a service that query the database. This service have a constructor and received a UnitOfWork. With Ninject, I can create a property marked as to be injected but if I do that, each time I will create this service, a new connection will be created to the database.

Just for this reason, I must manually create my services to control the number of connection created and no dependency injector can be used.

I have found that you can call the Inject method after created the service for inject dependencies but I'm sure I can use a better strategy.

Answer: 
With Ninject, you can have Ninject scope lifetimes of your injected dependencies to any object you want to provide (not just Singleton, Request, Thread, and Transient scopes).

From the [Ninject Documentation Wiki](http://wiki.github.com/ninject/ninject/object-scopes):

> 
> You can also easily define you own
>  scopes using the .InScope(object o)
>  method.
> 
> 
> 

You'll find some actual detail about how object scoping works in [this Ninject Google Groups question & answer](http://groups.google.com/group/ninject/browse_thread/thread/bac9b76fddd9630e).
You can also make your frameworks depend on a factory instance, and rely on the factory to perform your connection pooling.

Alternatively, you can use Ninject itself to always use the same object instance for the particular type.