팩토리를 사용하여 인터페이스의 다른 구체적인 인스턴스를 만듭니다. 구체적인 인스턴스 중 하나는 일반적으로 주입되는 서비스에 따라 다릅니다. 서비스의 라이프 사이클은 컨테이너에 의해 관리됩니다. 이 경우 용기를 공장에 주입해도 괜찮습니까?용기를 공장에 주입해도 괜찮습니까?
2
A
답변
2
컨테이너를 추상 팩토리, 팩토리 인터페이스 또는 팩토리 델리게이트로 변환하여 대신 소비자에게 주입하도록합니다.
그러면 공장에서 종속성으로 서비스를 가져올 수 있으며 공장에서 해결합니다. 의견에 따라
업데이트 :
당신이 공장에 서비스를 주입하는 경우, 해당 서비스의 동일한 인스턴스를 각각 전달되지 않습니다 공장이 생성 객체?
예, 공장에서 생성 된 각 객체는 동일한 서비스 인스턴스 (일반적으로 원하는 것)를 가져옵니다. 만약 이 아니라면을 원하면 서비스 공장을 공장에 투입하십시오. 일부 컨테이너는 공장 대표를 자동으로 해결하기위한 지원을 제공하므로 Func<IFooService>
을 주입 할 수 있습니다. @SebastianWeber이 코멘트에서 언급 한 바와 같이
그러나이 서비스의 라이프 사이클이 공장
의 라이프 사이클에 바인딩, 즉 모든 컨테이너의 제한이 아니다. 또한 중요한지 생각해보십시오. 두 가지 수명 중 가장 짧은 것을 골라서 둘 다 사용할 수 있습니다.
2
이 경우 컨테이너를 공장에 투입해도 괜찮습니까?
확실합니다. 그러나 경우에만 그 공장 구현 Composition Root 안에 위치해 있습니다. 해당 팩토리가 응용 프로그램 자체에있는 경우 (즉, 외부에 Composition Root), 서비스 로케이터 (an anti-pattern)로 컨테이너를 사용하고 있으므로 피해야합니다.
moarcode plox nom nom nom nom nom – Yuck