Dependency injection (DI) is a design pattern and a core concept in Angular. It allows components and services to obtain their dependencies from an external source rather than creating them manually. DI helps manage the dependencies between different parts of an application and promotes reusability and testability.
Angular's DI system provides the necessary infrastructure to automatically resolve dependencies and inject them into the components or services that need them. Dependencies are typically defined as services, and Angular's injector is responsible for creating instances of these services and injecting them where required.