通常,应尽可能晚地组装应用程序中的所有组件,因为这样可以确保最大程度的模块化,并且模块应尽可能松散地耦合。
实际上,这意味着您应该在应用程序的根目录下配置容器。
- 在桌面应用程序中,这将在Main方法中(或非常接近)
- 在ASP.NET(包括MVC)应用程序中,该文件位于Global.asax中
- 在WCF中,它将位于ServiceHostFactory中
- 等等
容器只是将模块组合成可运行的应用程序的引擎。原则上,您可以手动编写代码(这称为“ 穷人的DI” ),但是使用像Windsor这样的DI容器要容易得多。
理想情况下,这样的“ 合成根” 将是应用程序根目录中的唯一代码,从而使应用程序成为所谓的“ 谦虚可执行文件”
(来自出色的xUnit测试模式),它本身不需要单元测试。
您的测试根本不需要容器,因为您的对象和模块应该是可组合的,并且可以从单元测试中直接为它们提供 Test Double 。最好将所有模块设计为与容器无关。
同样在Windsor中,您应该将组件注册逻辑封装在安装程序中(类型实现
IWindsorInstaller),有关详细信息,请参阅文档。



