Обидві закономірності виглядають як реалізація принципу інверсії управління. Тобто об’єкт не повинен знати, як конструювати свої залежності.
Інжекція залежності (DI), здається, використовує конструктор або сетер для "введення" її залежностей.
Приклад використання конструкторської інжекції:
//Foo Needs an IBar
public class Foo
{
private IBar bar;
public Foo(IBar bar)
{
this.bar = bar;
}
//...
}
Локатор сервісів, здається, використовує "контейнер", який з'єднує свої залежності і надає йому бар.
Приклад використання сервера-локатора:
//Foo Needs an IBar
public class Foo
{
private IBar bar;
public Foo()
{
this.bar = Container.Get<IBar>();
}
//...
}
Оскільки наші залежності є лише самими об'єктами, ці залежності мають залежності, які мають ще більше залежностей, і так далі, і так далі. Таким чином, народилася інверсія контейнера управління (або контейнер DI). Приклади: Замок Віндзор, Нінжект, Карта структури, Весна тощо)
Але МОК / DI Контейнер виглядає точно як Locator Service. Чи називає це контейнер DI неправильним ім'ям? Чи є контейнер IOC / DI лише іншим типом пошуку послуг? Чи є нюансом у тому, що ми використовуємо контейнери DI в основному, коли у нас багато залежностей?