I only have a tiny bit of experience with Spring, but a lot of work done with Guice. Of course those are Java tools, and this seems to be a very .NET oriented crowd so far. But the same concepts apply. I believe NINject is in the spirit of Guice.
If it's an existing code base, you're really going to be refactoring your code. In our case it was like untying a knot. You undo one dependency which frees up another one and you can refactor. You can just keep iterating until you've loosened up everything.
About singletons: You will have singletons. They are useful. The reason they are not as terrible with DI is that the classes which depend on them are not statically dependent on them. This keeps unit testing easy. Which (I think) is really the goal here.