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).
[This article by Ayende in MSDN Magazine](http://msdn.microsoft.com/en-us/magazine/ee819139.aspx) is ostensibly about NHibernate, and mentions the word inject only once (and that only wrt AOP), but the phrasing of your question suggests to me it'll be great food for thought as you consider how to architect your app.