Difference between "Inversion of Control", "Dependency inversion" and "Decoupling"

Viewed 25077

I'm reading theory about dependency inversion and decoupling and I can't see the difference between the two.

Dependency inversion talks about decoupling functional components so that higher level components don't depend on lower level components.

Decoupling talks about the same thing and how to achieve it. But then we have IoC Containers that mess things up even further. Why aren't they rather called Dependency Inversion Containers or even better Dependency Injection Containers, because they serve runtime coupling of independent components?

Then we have Inversion of Control. It's basically the same thing as Dependency Inversion isn't it? Why are there three terms that describe the same thing? Or am I blind?

  1. What is the difference between the three?
  2. What does IoC have to do in IoC Containers?
4 Answers
Related