2013-11-01 51 views
1

您好:我已經成功地將Ninject與MVC 3/4和WCF擴展一起使用。我現在試圖用WebForms做一個簡單的實現,並遇到一個挑戰。步驟:Ninject - (usercontrol)不包含帶0參數的構造函數

  1. 我來自的NuGet下載Ninject.Web並安裝到我的WebForms項目
  2. 我編輯的NinjectWebCommon.cs - > CreateKernel方法:

     kernel.Bind<ICasePresenter>().To<Presenter.CasePresenter>(); 
    
  3. 我編輯的用戶控制:

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

我可以看到斷點碰到了我的綁定,但是我得到的錯誤是用戶控件不包含帶0參數的構造函數。這不是注入我的情況下(即使我添加了一個構造函數不帶參數,私營變種最終被空。提前

謝謝!

+0

請出示您的參構造函數的代碼。 –

回答

1

您正在使用字段注入而不是構造函數注入。就在Inject屬性轉移到你的構造:

private ICasePresenter presenter; 

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

或添加一個構造函數沒有參數:

[Inject] 
private ICasePresenter presenter; 

public CaseSummaryControl(ICasePresenter presenter) 
{ 
    this.presenter = presenter; 
} 

public CaseSummaryControl() 
{ 

} 

這樣你可以保留構造函數的單元測試參數。

的缺點是你可能需要時使用this.presenter添加空的檢查,因爲你現在必須創建一個CaseSummaryControl的路徑沒有指定ICasePresenter

閱讀Ninject documenation關於各種噴射模式。

+0

正如文檔所述,我不應該使用[Inject]屬性(這是我以前的經驗)。但是,如果我排除它,CreateKernel()中不會產生斷點。我試着將它移動到你的示例中提供的構造函數中,並且命中了斷點,但我仍然得到了no構造函數錯誤。 – mquickel

+0

根據http://stackoverflow.com/questions/14323489/argument-not-specified-for-parameter-using-ninject-in-web-forms,Web窗體不支持構造函數注入,只有字段注入。對此有何確認?現場注射似乎可行... – mquickel

+0

@MQuickel添加了一個備用解決方案。 –

0

ASP.NET Webforms主要支持基於PROPERTY的注入。如果您使用構造函數來定義注入,那麼它只是拋出錯誤。

以下是你可以按照按今天的文檔

  1. 安裝Ninject使用包管理器控制檯通過鍵入安裝,包裝Ninject.Web的步驟。
  2. Ninject現在應該安裝,你會看到一個名爲NinjectWebCommon.csApp_Start文件夾文件。只需將您的綁定放在那裏,就像提問者已經寫好的一樣。
  3. 而不是創建一個構造函數在您的調用類/方法中創建一個公共屬性,並在其上使用[Inject]屬性。

編譯您的應用程序和依賴關係應該現在自動創建。

你可以看到這些步驟快照示範在另一篇文章Using Ninject v3 in ASP.NET Web Forms

相關問題