简单来说和/或在高级伪代码中,DI 容器如何工作以及如何使用?
DI 容器的核心是基于以下内容创建对象:mappings接口和具体类型之间。
这将允许您从容器请求抽象类型:
IFoo f = container.Resolve<IFoo>();
这要求您之前已经配置好的从 IFoo 映射到实现 IFoo 的具体类(例如 Foo)的容器。
这本身并不会特别令人印象深刻,但 DI 容器可以做更多事情:
- 他们使用自动接线这意味着它们可以自动找出如果 IFoo 映射到 Foo 并且 IBar 映射到 Bar,但 Foo 依赖于 IBar,那么当您请求 IFoo 时,它将创建一个带有 Bar 的 Foo 实例。
- 他们管理lifetime的组件。您可能每次都需要一个新的 Foo 实例,但在其他情况下您可能需要相同的实例。您甚至可能每次都需要 Foo 的新实例,但注入的 Bar 应保持相同的实例。
一旦您开始尝试手动管理作品 and 寿命你应该开始欣赏 DI 容器提供的服务:)
许多 DI 容器可以做的远不止上述这些,但这些是核心服务。大多数容器都提供以下选项通过代码或 XML 进行配置 https://stackoverflow.com/questions/2512316/ioc-dependency-injection-please-explain-code-versus-xml/2513933#2513933.
当谈到正确的时候usage容器,Krzysztof Kozmic 刚刚发布一个很好的概述 http://devlicio.us/blogs/krzysztof_kozmic/archive/2010/06/20/how-i-use-inversion-of-control-containers.aspx.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)