2012-10-16 217 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

相关问题