Оба шаблона кажутся реализацией принципа инверсии управления. То есть, объект не должен знать, как построить его зависимости.
Инъекция зависимостей (DI), по-видимому, использует конструктор или сеттер для "инъекции" его зависимостей.
Пример использования инжекции конструктора:
//Foo Needs an IBar
public class Foo
{
  private IBar bar;
  public Foo(IBar bar)
  {
    this.bar = bar;
  }
  //...
}
Локатор сервисов, похоже, использует "контейнер", который связывает свои зависимости и дает foo it bar.
Пример использования локатора служб:
//Foo Needs an IBar
public class Foo
{
  private IBar bar;
  public Foo()
  {
    this.bar = Container.Get<IBar>();
  }
  //...
}
Поскольку наши зависимости - это только сами объекты, эти зависимости имеют зависимости, которые имеют еще больше зависимостей и т.д. и т.д. Таким образом, возникла инверсия контрольного контейнера (или контейнера DI). Примеры: Castle Windsor, Ninject, Карта структуры, Spring и т.д.)
Но контейнер IOC/DI выглядит точно как локатор сервисов. Называет ли это контейнер DI плохим именем? Является ли контейнер IOC/DI только другим типом локатора сервисов? Является ли нюанс тем фактом, что мы используем контейнеры DI в основном, когда у нас много зависимостей?
