2010-05-28 120 views
2

我開始使用依賴注入,並且在向基類中注入依賴時遇到了一些麻煩。將依賴注入到基類中

我有一個BaseController控制器,我的其他控制器繼承。在這個基本控制器的內部,我做了一些檢查,例如確定用戶是否有正確的權限來查看當前頁面,檢查是否存在某些會話變量等。

我在此基礎控制器內有一個依賴項我想用Ninject但是當我設置此我會爲我的其他依賴我被編譯器告知,注入:

錯誤1「MyProject.Controllers.BaseController」 不含一個構造 取0參數

這是有道理的,但我不知道如何注入這種依賴。我應該使用這種使用基本控制器的模式麼,還是應該以更高效/正確的方式進行操作?

+0

你可以發佈一些代碼的BaseController構造函數嗎? – 2010-05-28 12:42:57

+4

而不是解決這個問題,請考慮這些規則:1)喜歡繼承的構成。 2)不要在構造函數中執行任何工作。以下兩者將使您的生活更輕鬆。 – 2010-05-28 12:45:23

回答

11

您BaseController構造函數應該是這樣的

BacseConctoller(Info info) 
{ 
    this.info = info 
} 

,那麼對於所有的傳承類 其構造

ChildController(Info info):base(info) 
{ 
} 

在這種情況下,你可以注入信息對象的基本控制器類

+1

Seemann先生!我最近讀了[你的書](http://www.amazon.com/Dependency-Injection-NET-Mark-Seemann/dp/1935182501):) – Bart 2015-05-08 19:23:37

1

馬克是對的錢,

BaseClass(dependantObject object) 
{ 
Object = object; 
} 

所以要履行dependantObject因此,所有的子類可以訪問基的行爲,我們可以使用在子類中的注射和簡單鏈中的基礎構造,傳遞我們的「Ninjected」對象。

SubClass() : this(null) {} 

SubClass(dependantObject object) : base(object) 
    { 

    } 

快樂編碼!