Dependency Injection is a software design pattern that reduces coupling in code. Low-coupled code is more flexible, making it easier to change and test.
A simple example is that business logic depends on a set of data. This data could be stored in files, memory, or a database. The application’s business logic shouldn’t care how or where the data is stored, only that it can be stored and read back.
This can be visualised with the following class diagram
classDiagram
BusinessLogic--*DataStore
Database--|>DataStore
Filestore--|>DataStore
Application..>BusinessLogic : Injects DataStore
Application..>Database : Creates
Database
and Filestore
both implement the interface of DataStore
. The Application
then creates an instance of either Database
or Filestore
and injects it into BusinessLogic
.