2010-02-23 3 views
5

.NET 3.5 및 콘솔 응용 프로그램을 사용 중입니다. 결국 Windows 서비스가됩니다.Ninject의 Bind (Of T)는 어떤 DLL입니까?

내가 컴파일러는 여전히 불평 내 프로젝트 및 I에서 언급 한 모든 DLL을 포함했다

Bind<IWeapon>().To<Sword>(); 

같은 것을 사용 찾을 대부분의 예제. 내가 잘못 가고있는 모든 단서는? 죄송합니다. 이것은 어리석은 질문 일 수 있습니다.

업데이트 : 필요한 것으로 보이지만 참조되지 않은 수많은 라이브러리를 확인하십시오. Castle Core와 같은 도서관이 있습니다. 이것들이 포함되어야합니까?

답변

7

가장 먼저해야 할 일은 오버로드 한 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를 참조 할 필요가 없습니다.

희망이 도움이됩니다.

+0

감사합니다. 나는 한 번만 당신을 부딪 칠 수 있고 이것을 내가 올바른 할 수있는 대답으로 선택합니다. 나는 오후 내내 고투했다. 모든 것이 함께 어울리는 방법에 대한 문서가 있지만 나는 내 시나리오에 맞는 것을 찾기 위해 고심했다. 검색 결과에 갔을 때 시작하기에 대한 다른 자습서가 모두 누락 된 것처럼 보였습니다. – uriDium

+0

안녕하세요, 문제 없습니다! 나는 모든 IoC 컨테이너를 비교할 때 Ninject를 상당히 사용하여 오랜 시간 동안 고생했습니다. 다행히 도울 수있어. –

0

프로젝트 속성 (프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 클릭하십시오)으로 이동하여 .Net Framework 3.5로 콘솔 응용 프로그램을 다시 대상으로 설정하면 ".NET Framework 3.5 클라이언트 프로필"과 같은 내용이 표시 될 수 있습니다. 과거에 어셈블리가 제대로 참조되지 않는 문제가있었습니다.

호프가 이것이 도움이된다는 희망입니다.

+0

안녕하세요. 나는 빨리 보았다.하지만 그렇지 않았다. 어쨌든 고마워. – uriDium