2013-11-01 3 views
1

를 사용하는 생성자가 포함되어 있지 않습니다 안녕하세요 : 나는 성공적으로 MVC 3/4과 WCF 확장으로해서 Ninject를 사용 할 수있었습니다. 나는 이제 WebForms로 간단한 구현을 시도하고 도전에 부딪쳤다.Ninject에 - (UserControl을)은 0 인수

 kernel.Bind<ICasePresenter>().To<Presenter.CasePresenter>(); 
  • 내 사용자 편집 : - : 단계> CreateKernel 방법

    1. 나는 나의 웹폼이
    2. 내가 NinjectWebCommon.cs을 편집 한 프로젝트로 NuGet에서 Ninject.Web를 다운로드 및 설치 제어 :

      [Inject] 
      private ICasePresenter presenter; 
      
      public CaseSummaryControl(ICasePresenter presenter) 
      { 
          this.presenter = presenter; 
      } 
      

    중단 점이 내 바인딩에 충돌하는 것을 볼 수 있지만 사용자 정의 컨트롤에 0 개의 인수를 사용하는 생성자가 포함되어 있지 않다는 오류가 발생합니다. 내가 인수가없는 생성자를 추가 할 경우에도 (내 인스턴스를 주입 아니에요, 민간 VAR가 null 인 끝납니다.

    감사합니다 사전에!

  • +0

    에서 다음 단계의 스냅 샷 데모를 볼 수 있습니다. –

    답변

    1

    을 당신은 필드 주입 대신 생성자 주입을 사용하고 있습니다.

    private ICasePresenter presenter; 
    
    [Inject] 
    public CaseSummaryControl(ICasePresenter presenter) 
    { 
        this.presenter = presenter; 
    } 
    

    또는 매개 변수가없는 생성자를 추가합니다 : 그냥 생성자에 Inject 속성을 이동

    [Inject] 
    private ICasePresenter presenter; 
    
    public CaseSummaryControl(ICasePresenter presenter) 
    { 
        this.presenter = presenter; 
    } 
    
    public CaseSummaryControl() 
    { 
    
    } 
    

    그런 식으로 당신은 단위 테스트를위한 매개 변수를 사용하여 생성자를 유지할 수 있습니다.

    단점은 this.presenter를 사용할 때 지금 CaseSummaryControl을 만들 수있는 경로를 갖고 있기 때문에 당신이 필요가ICasePresenter를 지정하지 않고 널 검사를 추가 할 수 있습니다.

    다양한 주입 패턴에 Ninject documenation 읽어보십시오.

    +0

    설명서에 나와 있듯이 [주입] 속성을 전혀 사용하지 않아야합니다 (이전에 사용한 경험). 하지만 제외하면 CreateKernel()에서 중단 점이 발생하지 않습니다. 나는 당신이 당신의 예제에서 제공하고 breakpoint에 부딪혔을 때 그것을 생성자로 옮겨 보았습니다,하지만 여전히 생성자 오류가 없습니다. – mquickel

    +0

    http://stackoverflow.com/questions/14323489/argument-not-specified-for-parameter-using-ninject-in-web-forms에 따르면 Web Forms는 생성자 주입을 지원하지 않고 필드 주입 만 지원합니다. 그걸 확인해 봤어? 필드 주입이 작동하는 것 같습니다 ... – mquickel

    +0

    @MQuickel 대체 솔루션을 추가했습니다. –

    0

    ASP.NET 웹 양식은 대부분 재산 주사 기반을 지원합니다. Injection을 정의하기 위해 생성자를 사용한다면 단순히 오류가 발생합니다. 여기

    설치 패키지 Ninject.Web을 입력하여 패키지 관리자 콘솔을 사용

    1. Ninject에를 설치 현재 문서에 따라 수행 할 수있는 단계입니다.
    2. Ninject에 지금 설치되어 있어야합니다 그리고 당신은 NinjectWebCommon.cs App_Start 폴더에라는 이름의 파일을 볼 수 있습니다. 질문자가 이미 쓴 것처럼 구속력을 설정하십시오.
    3. 생성자를 만드는 대신 호출 클래스/메서드에 public 속성을 만들고 위에 [Inject] 특성을 사용합니다.

    응용 프로그램을 컴파일하면 종속성이 자동으로 작성되어야합니다.

    당신은 당신의 매개 변수가없는 생성자의 코드를 보여주십시오 다른 포스트 Using Ninject v3 in ASP.NET Web Forms