Inversion of control is a design pattern that follows the dependency inversion principle of SOLID design. It involves separating high-level policy from low-level details by inverting control of dependencies between components, such that high-level components do not depend on low-level components, but instead rely on abstractions. Common techniques for implementing inversion of control include dependency injection, service locators, events, and delegates.