Following on from my previous post about dependency injection, the topic of IoC containers feels like a nice continuation. I wanted to keep the two posts separate, because it's important to understand that you do not need an IoC Container just because you want to inject your dependencies. Dependency injection itself is a very simple concept - all you're doing is passing an instance of the dependency into your code as an abstraction (ie. via an interface or abstract class the dependency implements). You do not need an IoC container to do this. An IoC Container is just a library to help you manage doing so.