두 패턴 모두 제어 역전 원리를 구현 한 것처럼 보입니다. 즉, 객체는 의존성을 구성하는 방법을 알아야합니다.
DI (Dependency Injection)는 생성자 또는 setter를 사용하여 종속성을 "주입"하는 것으로 보입니다.
생성자 주입 사용 예 :
//Foo Needs an IBar
public class Foo
{
private IBar bar;
public Foo(IBar bar)
{
this.bar = bar;
}
//...
}
Service Locator는 "컨테이너"를 사용하는 것으로 보입니다. "컨테이너"는 종속성을 연결하고 foo에게 막대를 제공합니다.
서비스 로케이터 사용 예 :
//Foo Needs an IBar
public class Foo
{
private IBar bar;
public Foo()
{
this.bar = Container.Get<IBar>();
}
//...
}
우리의 의존성은 단지 객체 그 자체이기 때문에, 이러한 의존성은 더 많은 의존성 등을 갖는 의존성을 가지고 있습니다. 따라서, 제어 컨테이너의 반전 (또는 DI 컨테이너)이 탄생했습니다. 예 : Castle Windsor, Ninject, Structure Map, Spring 등)
그러나 IOC / DI 컨테이너는 정확히 서비스 로케이터처럼 보입니다 . DI 컨테이너라고하는 것이 나쁜 이름입니까? IOC / DI 컨테이너는 또 다른 유형 의 Service Locator입니까? 의존성이 많을 때 DI 컨테이너를 주로 사용한다는 사실의 뉘앙스입니까?