2012-10-16 116 views
1

我正在開發一個應用程序並使用Ninject for DI。我希望能夠根據我使用的解決方案配置將不同的對象注入給定的方法。也就是說,在「模擬」配置模式中,我想注入一個模擬對象,並在調試/發佈配置中注入一個真實對象。Ninject - 不同的解決方案配置

閱讀Ninject and configuration我知道XML配置提供了這種可能性。但是,如果可能的話,我希望不使用XML。 (我傾向於同意Ninject認爲注入細節不應該在已發佈的產品中配置......)我也意識到我可以使用預處理器指令來執行此操作。我想知道的是,如果Ninject中存在此功能,或者需要擴展/解決方法來完成此功能。

+1

相關http://stackoverflow.com/questions/1465849/using-ioc-for-unit-testing不使用DI在單元測試和[苦思冥想與DI配置的或做過多的測試之前( http://blog.ploeh.dk/2011/12/21/TestingContainerConfigurations.aspx)。如果你決定走下坡路,那麼在Ninject中打包配置的方式是使用模塊 - 你可以在構建時將各種配置傳遞給內核 –

+0

謝謝你的優秀文章。我沒有考慮使用DI進行單元測試的(非常有效)。我將研究模塊,因爲我仍然想使用DI來對我的用戶界面進行一般測試。再次感謝。 –

+0

值得在SO上進行Ninject測試/ DI測試/ DI單元測試或類似搜索 - 這已在 –

回答

4

你的ninject配置中的預處理指令怎麼樣?它應該做你想做的。

#if DEBUG 
     kernel.Bind<IMyService>().To<MyServiceMock>(); 
#else 
     kernel.Bind<IMyService>().To<MyService>(); 
#endif 
+0

這實際上是我最終做的事情(請參閱我對我的問題的最後評論),它運作良好。 –

+0

好,但你沒有發佈它作爲你的問題的答案。現在,其他開發人員更容易找到類似問題的解決方案。 – mipe34

相關問題