2011-10-27 3 views
5

바인딩에서 콘크리트 유형을 가져 오는 방법은 있습니까? 구현을 인스턴스화하고 싶지 않고 형식을 가져옵니다.ninject에서 모든 구체적인 유형 가져 오기

나는이

Type[] concreteTypes = Kernel.GetBindings(typeof(IController)). 
    GetImplementingTypes(); 

Kernel처럼 뭔가를 할 원하는 것은 단지 StandardKernel입니다.

결국에는 이러한 유형을 반영하고 싶습니다.

답변

4

유일한 방법은 kernel.GetAll<IController>()을 사용하여 모든 인스턴스를 얻는 것입니다. Ninject에는 바인딩 매핑이 설정되어 있지 않습니다. 구현은 인스턴스가 주입 또는 호출을 통해 해결 될 때 결정됩니다. 이는 Ninject가 조건부 바인딩과 암시 적 바인딩을 허용하기 때문입니다.

MVC3 응용 프로그램을 설정하면 Ninject가 어떤 컨트롤러를로드하고 어떤 컨트롤러에 삽입할지 결정하기 때문에 실제로 컨트롤러를 등록하지 않습니다. 암시 적 바인딩을 느리게 생성하여이를 수행합니다.

가장 가까운 사용자는 StandardKernel을 확장하고 보호 된 바인딩 집합에 액세스하여 조건부가 아닌 모든 바인딩을 찾습니다. 모든 조건부 바인딩이 없으면 바인딩을 분리 할 수는 있지만 정확히 StandardProvider 클래스 뒤에 숨겨져있을 수 있으므로 정확하게 기억할 수는 없습니다.

특정 인터페이스에 대한 정확한 바인딩 구성을 알아야하는 이유는 무엇입니까?

+0

나는 이것이 영원히 전에 실현되었음을 깨달았지만, 나는 이것을 필요로하는 단지 한 곳이다. 나는 Ninject가 나를 위해 서비스 인스턴스를 구축하게하기 위해 Ninject 기반 ServiceHost for WCF를 구축하고있다. ServiceHost 생성자에 서비스 인터페이스가 아닌 구체적인 서비스 구현 유형을 제공해야합니다. –

관련 문제