2009-12-21 1 views
2

그래서이 새로운 프로젝트를 시작했고, 내가 읽었던 모든 새로운 디자인 원칙을 통합하려고했습니다. 느슨하게 결합, 테스트 및 일부 패턴을 따르십시오.벽에 부딪 혔기 때문에 IoC의 첫 번째 단계 '뒷 배경'을 설명하십시오

그래서 저는 너무 많은 공장/관리자를 클래스 생성자로 전달해야하는 문제에 직면하여 Dependancy injection으로 유도했습니다.

public class SomeClass 
{ 
    public SomeClass(IDBFactory factory, IOrderManager orderManager, ....) 
} 

그래서 내가 이해 한 것에서 ninject를 사용하면 특정 구현을 클래스에 바인딩합니다.

그래서 무엇이 뒤에서 진행되고 있습니까?

NInject는 SomeClass를 인스턴스화 할 때마다 구성 파일에 정의 된 구현을 바인딩합니다.

내가 할 :

ISomeClass sc = NInject.Get<ISomeClass>(); 

및 Ninject에 할 것 :

new SomeClassImpl(pass in all the implementaitons in the constructor) 

맞습니까? 이 방식으로 작동

+0

참조 http://stackoverflow.com/questions/1082898/how-exactly-dependency-injection-is-implemented-internally-in-spring-net –

답변

4

내가 Ninject에 모르겠지만, 대부분의 DI 컨테이너 지원 자동 배선는 : 당신이 ISomeClass을 요청하면

  1. , 그것은 등록 된 모든 유형의 목록을 보인다. 이 목록을 사용하여 ISomClass의 구현이 SomeClass임을 알게됩니다.
  2. SomeClass의 생성자를 사용하여 (아마도 Activator.CreateInstance를 사용하여) 인스턴스를 생성하므로 Reflection을 사용하여 필요한 매개 변수를 파악합니다.
  3. 각 매개 변수에 대해 유형을보고 각각에 대해 1-2 단계를 반복합니다.

따라서 프로세스는 재귀적일 수 있지만 결국에는 모든 종속성이 충족되는 완전히 채워진 개체 그래프로 끝나야합니다.