Flexibility: DI allows you to easily change the behavior of an application without modifying its code. By injecting dependencies, you can easily switch between different implementations of a service/ class.
Easier unit testing: DI makes it easy to unit test your code by allowing you to easily replace real dependencies with mock with the help of interfaces.
Independent modules: By separating dependencies, it becomes easier to make changes to your code without affecting the rest of the system.
Reusability: DI promotes reuse of components by making them independent of their environment. This allows you to reuse the same components in different applications without modification.