Dependency InjectionΒΆ

Dependency injection wires implementations to protocols.

Use cases depend on Protocols, not implementations. The DI container provides concrete implementations (Repositories and Services) that satisfy those protocols.

Applications depend on the DI container. The container provides repositories and services; applications wire use cases using those dependencies. This makes implementations swappable without changing business logic.