2011-11-17 58 views
1

我想使用NInject.MVC3來解析在控制器上調用Action方法時要實例化的具體類。因此,例如:Ninject MVC3中Action方法參數的依賴注入

[HttpPost] 
    public ActionResult Index(IMyModelInterface model) 
    { 
     // do something 

     return View(); 
    } 

顯然沒有依賴注入,MVC3不能實例化IMyModelInterface,但我可以說接口綁定到實現該接口的具體類。

我試過這個,只是從試圖實例化接口的MVC框架中得到錯誤。

因此,首先,這是一件不好的事情,試圖做?

如果這不是一件愚蠢的事情,我該怎麼做?

如果這是一件壞事,我該怎麼做。我考慮過使用ViewModel然後複製參數?我稍微不願意這樣做,因爲我的模型包含所有視圖使用的良好驗證屬性 - 並且必須在ViewModel中複製它,這似乎增加了維護開銷。

我已經看到使用Autofac的doing this的SO問題。

我正在使用來自Nuget包的NInject和NInject.MVC3的最新版本。

+0

出於好奇,你爲什麼需要將它注入Action方法?爲什麼不能在控制器上使用構造函數注入? – BFree

+0

我可以使用構造函數注入,如果我注入對某些服務的依賴關係,但我想在模型上使用DI,所以我可以從模型的一個實現切換到另一個。我現在稍微後悔這種選擇。 – iandotkelly

回答

3

Ninject不允許您在類似的方法中注入依賴項,因爲您可以閱讀here
您應該通過控制器的構造函數,屬性或setter方法注入您的依賴關係。

+0

噢,我要麼將我的模型接口包裝在另一個類中以實現此行爲,要麼重新排列我的架構以允許在控制器上進行構造函數注入 - 謝謝。 – iandotkelly

+0

是的,我認爲這是正確的做法。別客氣。 –

+0

@Nelson,你可以看看這個非常類似的問題:http://stackoverflow.com/questions/29971605/custom-authorizeattribute-ninject-property-injection-doesnt-work-injected-prop –

4

你可能可以實現你自己的模型綁定器來做到這一點。

子類DefaultModelBinder,覆蓋CreateModel並在此方法中使用Ninject返回適當的類型。

+0

感謝StanK - 當我得到更多對NInject鼓勵的默認模式充滿信心,我可能會嘗試這種方法。 – iandotkelly