Suggest an editImprove this articleRefine the answer for “Why is DIP the foundation of IoC and DI?”. Your changes go to moderation before they’re published.Approval requiredContentWhat you’re changing🇺🇸EN🇺🇦UAPreviewTitle (EN)Short answer (EN)**DIP is the foundation of IoC and DI** because the principle itself formulates the key idea: depend on abstractions, not on concrete implementations, and that is exactly what the Inversion of Control and Dependency Injection mechanisms do. **Key point:** DIP is the fundamental idea, IoC is its architectural manifestation, and DI is the technical mechanism that makes DIP convenient and safe to apply.Shown above the full answer for quick recall.Answer (EN)ImageDIP is the foundation of IoC and DI because the principle itself formulates the key idea: **depend on abstractions, not on concrete implementations**, and that is exactly what the Inversion of Control and Dependency Injection mechanisms do. In detail: ### 1. IoC (Inversion of Control) is the practical application of DIP DIP states: *a high-level module should not create its dependencies itself*. IoC implements this as follows: - an object **does not control** which concrete class it uses; - control is "inverted" and handed to an external system (a container, a factory, configuration). So IoC literally embodies the idea of DIP - **details do not dictate the rules to high-level logic**. ### 2. DI (Dependency Injection) is the mechanism that carries out DIP automatically DIP requires a module to depend on abstractions. DI makes this technically possible: - an object receives its dependencies "from outside", - dependencies are passed through a constructor, a setter, or method parameters, - the object does not know about concrete classes, only about the interface. DI can automatically supply the needed implementations - this is the practical realization of DIP. ### 3. Without DIP, neither IoC nor DI would make sense If modules depended on concrete implementations, then: - an IoC container would have nothing to swap - the dependency would be hardwired, - DI would not be able to inject a new implementation without rewriting the old one, - testing through mocks would become impossible. DIP is the theoretical base, IoC/DI are its practical implementation. ### 4. DIP formulates the architectural goal, IoC/DI provide the technique to reach it DIP: "High-level code should depend on interfaces". IoC/DI: "We will supply the implementation of these interfaces automatically, without changing the high-level code". ### 5. DI containers are built specifically around DIP Any DI container (Spring, NestJS, Angular, .NET DI, Guice) works on the following scheme: - an interface is registered, - its implementation is registered, - the container injects dependencies into the high-level module. This is DIP in action. ### 6. IoC and DI make DIP possible in real applications DIP sets the architectural rule. IoC/DI automate the process, eliminating manual creation of dependencies and making the system flexible. Summary: **DIP is the fundamental idea. IoC is its architectural manifestation. DI is the technical mechanism that makes DIP convenient and safe to apply.** **All three concepts are interconnected: IoC and DI exist specifically because of DIP.**For the reviewerNote to the moderator (optional)Visible only to the moderator. Helps review go faster.