Если взять классический пример автомобиля. Вы можете пройти через обычный процесс покупки автомобиля и взять колеса, которые дает вам производитель:
public class Fifteens
{
public void Roll() { Console.WriteLine("Nice smooth family ride..."); }
}
public class Car
{
Fifteens wheels = new Fifteens();
public Car() { }
public void Drive() { wheels.Roll; }
}
Затем:
Car myCar = new Car();
myCar.Drive() // Uses the stock wheels
Или вы можете найти собственный конструктор автомобилей, который позволит вам точно указать, какое колесо вы хотите использовать в своей машине. , при условии, что они соответствуют спецификациям колеса:
public interface IWheel
{
void Roll();
}
public class Twenties : IWheel
{
public void Roll() { Console.WriteLine("Rough Ridin'...");
}
public class Car
{
IWheel _wheels;
public Car(IWheel wheels) { _wheels = wheels; }
public void Drive() { wheels.Roll(); }
}
Затем:
Car myCar = new Car(new Twenties());
myCar.Drive(); // Uses the wheels you injected.
Но теперь вы можете ввести любое колесо, какое захотите. Имейте в виду, что это всего лишь один из видов внедрения зависимостей (внедрение конструктора), но он служит одним из самых простых примеров.
Мартин Фаулер проделал огромную работу , объясняя эти закономерности .
Есть несколько различных аналогий, которые облегчают понимание инверсии управления. В обычной жизни мы переживаем это по-разному, поэтому мы заимствуем форму в коде. Одна аналогия называется "Цепь командования" в армии.
Это, вероятно, самая четкая параллель с Инверсией контроля. Военные снабжают каждого новобранца основными вещами, необходимыми ему для работы в его звании, и отдают команды, которым новобранец должен подчиняться. Тот же принцип применяется в кодексе. Каждый компонент получает от инстанцирующего субъекта (т.е. командира в данной аналогии) необходимые для работы положения. Затем инстанцирующая сущность действует на этот компонент так, как ему нужно действовать.
Подробнее здесь:
Есть ли у кого-нибудь хорошая аналогия для внедрения зависимостей?