가장 먼저해야 할 일은 오버로드 한 Load 메서드 내부의 Ninject 모듈 내에서 바인딩 코드를 실행하는 것입니다. 예를 들어
:
는
public class ApplicationModule : NinjectModule {
public override void Load() {
Bind<IWeapon>().To<Sword>();
// additional bindings continue ...
}
}
NinjectModule 클래스 따라서 클래스의 범위 내에있어서 가능한 Bind<T>()
만드는 Ninject에 능통 결합 구문을 정의하는 클래스 및 인터페이스를 상속한다. 커널이 인스턴스화 될 때 이러한 모듈은 다음 Ninject에 커널에 전달된다
var kernel = new StandardKernel(new ApplicationModule());
커널에 전달 각 모듈의 Load()
방법은 다음 호출되고 결합 정의 실행 방법에 포함.
위 예제는 NinjectModule을 기본 클래스로 지정합니다. 그러나 이것은 Ninject의 버전 2.0에만 적용됩니다. Ninject 1.x를 사용하는 경우 기본 클래스는 StandardModule
입니다. 두 경우 모두로드 메소드가 대체되고 바인딩 명령문 (두 버전에서 유사 함)이 발행됩니다.
더 귀하의 질문에 대답하기 :
Ninject에 1.x에서의 경우를 필요한 DLL이 ninject.core.dll하고 StandardModule을가에 정의 된 네임 스페이스는 Ninject.Core입니다.
Ninhect 2.0의 경우 필요한 DLL은 ninject.dll이고 NinjectModule이 정의 된 네임 스페이스는 Ninject.Modules입니다. 당신이 Ninject에 1.x에서의 경우 등 상황에 맞는 바인딩 또는 범위 당신의 바인딩을 사용하는 경우, 즉 - 두 경우 모두
, 당신은 바인딩 문이 얼마나 복잡한에 따라 더 네임 스페이스를 참조해야 할 수도 있습니다 이러한 복잡한 경우 Ninject.Conditions.dll을 참조해야 할 수도 있습니다.
Ninject의 차단 기능 (1.x 핵심 기능이지만 버전 2.0의 확장 기능)을 사용하지 않는 한 Castle.Core를 참조 할 필요가 없습니다.
희망이 도움이됩니다.
감사합니다. 나는 한 번만 당신을 부딪 칠 수 있고 이것을 내가 올바른 할 수있는 대답으로 선택합니다. 나는 오후 내내 고투했다. 모든 것이 함께 어울리는 방법에 대한 문서가 있지만 나는 내 시나리오에 맞는 것을 찾기 위해 고심했다. 검색 결과에 갔을 때 시작하기에 대한 다른 자습서가 모두 누락 된 것처럼 보였습니다. – uriDium
안녕하세요, 문제 없습니다! 나는 모든 IoC 컨테이너를 비교할 때 Ninject를 상당히 사용하여 오랜 시간 동안 고생했습니다. 다행히 도울 수있어. –