当前位置:  开发笔记 > 编程语言 > 正文

IoC容器的用法; 特别是温莎

如何解决《IoC容器的用法;特别是温莎》经验,为你挑选了1个好方法。

我认为这个问题的答案非常明显,以至于没有人对这方面的写作感到困扰,但是它已经很晚了,我真的无法理解这个问题.

我一直在阅读IoC容器(在这种情况下是Windsor),我很想念你如何从代码的各个部分与容器对话.

我得到DI,我一直在做穷人的DI(空构造函数调用带有默认参数实现的重载注入构造函数)一段时间,我可以完全看到容器的好处.但是,我错过了一条至关重要的信息; 每次需要服务时,你应该如何引用容器?

我是否创建了一个我传递的全局内容?当然不是!

我知道我应该这样称呼:

WindsorContainer container = new WindsorContainer(new XmlInterpreter());

(例如)当我想加载我的XML配置时,但是我该如何处理容器?每次创建一个新容器之后是否通过一些内部静态majicks或其他方式持久保存加载的配置,或者每次都必须重新加载配置(我猜不是,或生命周期无法工作).

不理解这会阻止我弄清楚生命周期是如何工作的,并继续使用一些IoC的功能

谢谢,

安德鲁



1> Mauricio Sch..:

99%的案例是每个应用程序的一个容器实例.通常,您在Application_Start(对于Web应用程序)中初始化它,就像这样.

在那之后,它真的取决于容器的消费者.例如,一些框架,如Monorail和ASP.NET MVC允许您拦截实例的创建(在这种情况下是控制器),因此您只需在容器中注册控制器及其依赖项即可,只要您获得了请求容器负责为每个控制器注入其依赖项.请参阅此ASP.NET MVC控制器.在这些框架中,您几乎不需要在类中调用甚至引用容器,这是推荐的用法.

其他框架不允许您轻松地进入创建过程(如Webforms),因此您必须诉诸此类黑客,或者拉出所需的依赖项(即显式调用容器).要获取依赖关系,请使用到此容器的静态网关,如maxnk所描述的那样.请注意,通过这样做,您实际上使用容器作为服务定位器,它不会分解事物以及控制反转.(见这里和这里的差异)

希望这能清除你的疑虑.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有