我认为这个问题的答案非常明显,以至于没有人对这方面的写作感到困扰,但是它已经很晚了,我真的无法理解这个问题.
我一直在阅读IoC容器(在这种情况下是Windsor),我很想念你如何从代码的各个部分与容器对话.
我得到DI,我一直在做穷人的DI(空构造函数调用带有默认参数实现的重载注入构造函数)一段时间,我可以完全看到容器的好处.但是,我错过了一条至关重要的信息; 每次需要服务时,你应该如何引用容器?
我是否创建了一个我传递的全局内容?当然不是!
我知道我应该这样称呼:
WindsorContainer container = new WindsorContainer(new XmlInterpreter());
(例如)当我想加载我的XML配置时,但是我该如何处理容器?每次创建一个新容器之后是否通过一些内部静态majicks或其他方式持久保存加载的配置,或者每次都必须重新加载配置(我猜不是,或生命周期无法工作).
不理解这会阻止我弄清楚生命周期是如何工作的,并继续使用一些IoC的功能
谢谢,
安德鲁
99%的案例是每个应用程序的一个容器实例.通常,您在Application_Start(对于Web应用程序)中初始化它,就像这样.
在那之后,它真的取决于容器的消费者.例如,一些框架,如Monorail和ASP.NET MVC允许您拦截实例的创建(在这种情况下是控制器),因此您只需在容器中注册控制器及其依赖项即可,只要您获得了请求容器负责为每个控制器注入其依赖项.请参阅此ASP.NET MVC控制器.在这些框架中,您几乎不需要在类中调用甚至引用容器,这是推荐的用法.
其他框架不允许您轻松地进入创建过程(如Webforms),因此您必须诉诸此类黑客,或者拉出所需的依赖项(即显式调用容器).要获取依赖关系,请使用到此容器的静态网关,如maxnk所描述的那样.请注意,通过这样做,您实际上使用容器作为服务定位器,它不会分解事物以及控制反转.(见这里和这里的差异)
希望这能清除你的疑虑.