Dependency Injection is a fancy word for a very simple design pattern that decouples highly dependent components.
The traditional approach for coupling the objects with each other was to hard code the dependency.
public interface IEngine
{
...
}
public class DieselEngine implements IEngine
{
...
}
public interface ICar
{
...
}
public class Taxi implements ICar
{
private Engine engine;
public Taxi()
{
engine = new DieselEngine();
...
}
}
Writing the same code implementing the Dependency Injection pattern might be the following.
public interface IEngine
{
...
}
public class DieselEngine implements IEngine
{
...
}
public interface ICar
{
...
}
public class Taxi implements ICar
{
private IEngine engine;
public Taxi()
{
...
}
public void setEngine(IEngine ob)
{
engine = ob;
}
}
Dependency Injection is a specific form of Inversion of Control. The process of obtaining the needed dependency is inverted. Instead of letting the code within the Taxi class to select which is the exact IEngine object it will be connected with, that decision is taken by other parts of our program.