나는 당신의 전제가 여기에서 약간 혼란스러워한다고 생각합니다. 공장을 주입하는 것에 대해 이야기하지만, 공장 패턴은 DI 프레임 워크가 널리 퍼지지 않았을 때 의존성 주입 프레임 워크가 수행하는 것의 하위 세트를 수행하는 것이 목적인 창조 패턴입니다. 그런 이유로 유용합니다. 그러나 DI 프레임 워크가있는 경우 DI 프레임 워크가 공장이 달성 한 목적을 달성 할 수 있으므로 더 이상 팩토리가 필요하지 않습니다.
즉, 의존성 주입과 일반적으로 사용하는 방법에 대해 조금 설명하겠습니다.
의존성 주입을 수행하는 방법에는 여러 가지가 있지만 가장 일반적인 방법은 생성자 주입, 속성 주입 및 직접 DIContainer입니다. 속성 주입은 대부분 잘못된 접근 방식이므로 (제대로 올바른 접근 방식) 생성자 주입에 대해 이야기하겠습니다. DIContainer 액세스는 다른 접근 방식 중 하나를 절대 수행 할 수없는 경우를 제외하고는 바람직하지 않습니다.
생성자 주입은 의존성에 대한 인터페이스와 해당 의존성에 대한 구체적인 구현을 알고있는 DIContainer (또는 팩토리)가있는 곳이며, 구성 시간에 구현시 공장에서 구현할 때 해당 인터페이스에 의존하는 객체가 필요한 경우 그것.
즉
IDbConnectionProvider connProvider = DIContainer.Get<IDbConnectionProvider>();
IUserRepository userRepo = new UserRepository(connProvider);
User currentUser = userRepo.GetCurrentUser();
많은 DI 프레임 워크는 DIContainer가 UserRepository의 생성자를 검사하여 구체적인 구현을 알고있는 인터페이스를 검사하고 자동으로 사용자에게 전달하는 위치로이를 단순화 할 수 있습니다. DI와 IoC는 둘 다 많이 교환되고 모호한 차이가있는 용어이지만이 기술을 제어의 반전이라고합니다.
이제 가장 중요한 코드가 DIContainer에 액세스하는 방법이 궁금하다면,이를 액세스하기위한 정적 클래스를 가질 수도 있고, 더 적절한 것은 대부분의 DI 프레임 워크에서 DIContainer를 새로 만들 수 있다는 것입니다. 주어진 인터페이스에 대해 구체적으로 알고있는 유형의 내부 싱글 톤 사전에 대한 랩퍼.
즉, 코드에서 원하는 곳 어디에서나 DIContainer를 새로 만들 수 있고 인터페이스와 콘크리트 관계를 알기 위해 이미 구성한 것과 동일한 DIContainer를 효과적으로 얻을 수 있습니다. DIContainer를 코드와 직접 상호 작용해서는 안되는 부분에서 숨기는 일반적인 방법은 필요한 프로젝트 만 DI 프레임 워크에 대한 참조를 갖도록하는 것입니다.