2010-05-14 69 views
1

我需要在抽象類中做一些不同的事情來獲得依賴注入與Ninject一起工作嗎?Ninject:抽象類

我有下面的代碼基本控制器:

public abstract class BaseController : Controller 
{ 
    public IAccountRepository AccountRepository 
    { 
     get; 
     set; 
    } 
} 

我的模塊如下所示:

public class WebDependencyModule : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<IAccountRepository>().To<AccountRepository>(); 
    } 
} 

這是我Global.asax

protected override void OnApplicationStarted() 
{ 
    Kernel.Load(new WebDependencyModule()); 
} 

protected override IKernel CreateKernel() 
{ 
    return new StandardKernel(); 
} 

它的工作原理時,我用[Inject]裝飾IAccountRepository財產屬性。

+1

編輯答案有點 - 希望整體事情現在已經很清楚 - 如果這沒有意義,請隨時留言。順帶一提,請務必下載Ninject源代碼 - 這是這個星球上唯一能找到關於Ninject的最佳解決方案。測試是一組相當不錯的答案。 – 2010-05-15 01:12:14

+0

啊,這是一個好主意。一定要檢查源代碼。謝謝! – Pickels 2010-05-15 06:09:42

回答

2

不知道你在做什麼。

它看起來像你想做物業注入。如果是這樣,你必須堅持這個屬性。

Ninject不會隨機在屬性中粘貼東西。

即使可以,你也不想從試圖理解什麼取決於什麼(我已經完全擺脫了PI)的角度來看待它。

如果你想做構造函數注入,具體的控制器將需要問一個並將其傳遞給'BaseController'。

Ninject將步行到Object並注入屬性屬性,但不以任何特殊方式處理abstract類。

無論是或我失去了一些東西。

+0

這對我來說很有意義,因爲你不喜歡屬性注入,你有一些示例代碼?在我看來,你會在某處傳遞IKernal,這部分我不完全理解,你能解釋一下嗎? – Haroon 2011-05-04 14:30:06

+0

@Haroon:想不出任何好的例子。你有沒有看過[ninject wiki](https://github.com/ninject/ninject/wiki/Table-of-Contents)?我只是說你在任何地方都使用構造函數注入。缺少屬性注入作爲基類獲取注入內容的快捷方式只能通過以下方式來解決:a)丟棄到服務位置(錯誤)b)使派生構造函數代表您請求它。任何基類要求內核的地方都不比服務地點更好 - 至少Propety Injection會給你一個間接的級別。 – 2011-05-04 15:40:58

+0

多數民衆贊成在我的想法,我不喜歡這個事實,我必須通過在內核/容器,並得到ctor解決依賴。傳遞太多的信息給我喜歡的那個班。屬性注入的唯一問題是你正在與Ninject綁定...我看到一個例子,我可以使用typeof 那樣,我沒有引用ninject,只有我的屬性...無論如何,這一切對我來說似乎都非常黑客特別是因爲我使用的是國際奧委會容器... – Haroon 2011-05-04 15:48:56