Dependency injection provides the objects that an object needs (dependencies) rather than constructing them itself. Dependency injection uses the dependency inversion principle of code depending upon abstractions (usually an interface) rather than directly depending upon the dependency (Ferrara 2013). A developer no longer needs to instantiate with the new operator from inside of the class. Instead, it can be taken as a constructor parameter or via a setter (Ferrara 2013). Whilst containers are no longer needed with dependency injection, they do make life a lot easier for the developer. Dependency injection containers are a map of dependencies the class needs. The container will also have the logic to create dependencies that haven't been created yet. So instead of creating the classes yourself, you can ask the container for new instances (Ferrara 2013). Dependency injection promotes loose coupling between modules to provide a way to switch code modules being used without the need to build and restart the entire application or parts of it. This could be done by using either a configuration file or by reading dependency injection information from a database table (Jhangra 2016).
A benefit of using dependency injection design pattern is that it enables you to ask the container for new instances of a class, saving you from creating them yourself. A developer can also inject additional code between dependencies, for example, validation logic, which saves the developer from having to write this logic for every class. Another benefit of using dependency injection design pattern is that it can make testing a lot easier. Dependency injection allows the developer to replace complex dependencies, such as databases, with mocked implementations of those dependencies, allowing you to isolate the code being tested (Culp 2011).
By using dependency injection, you are able to write cleaner and more efficient code, that is easier to read, easier to test, and easier to modify in the future.
Culp A, June 2011, Microsoft, accessed 15th August 2016
Ferrara A, 9 January 2013, online video, accessed 3rd August 2016
Jhangra N, 16 June 2016, Code Project, accessed 3rd August 2016-08-17
Shimoon A, 14 October 2015, dotnetliberty, online video, accessed 3rd August