The Dependency Inversion Principle (DIP) states that high level modules should not depend on low level modules; both should depend on abstractions. Abstractions should not depend on details. Details should depend upon abstractions.
Dependency Injection and Dependency Inversion are often times mixed up, the truth is that dependency injection are related but NOT the same. In this visualized (not coding) example of dependency injection we also cover the Dependency Injection Principle in depth.
The lesson with the golden toilet covers the dependency injection principle with a coding example while this lesson covers it much more thoroughly from a conceptual view point (after explaining dependency injection and how the two relate).