Dependency Injection (DI) as a software design pattern can be used by any software language. It allows us to develop loosely-coupled code. DI was designed to make code maintainable and helps to reduce the tight coupling among software components.