在简单的术语和/或高级伪代码中,DI容器如何工作以及如何使用?
在其核心,DI容器基于接口和具体类型之间的映射创建对象.
这将允许您从容器请求抽象类型:
IFoo f = container.Resolve<IFoo>();
这要求您先前配置容器从IFoo映射到实现IFoo的具体类(例如Foo).
这本身并不是特别令人印象深刻,但DI容器做得更多:
>他们使用自动布线,这意味着他们可以自动地弄清楚,如果IFoo将Foo和IBar映射到Bar,但Foo依赖于IBar,那么当您请求IFoo时,它将创建一个带有Bar的Foo实例.
他们管理组件的使用寿命.你们每次都想要一个新的Foo实例,但在其他情况下,你可能需要同样的实例.您甚至可能每次都想要新的Foo实例,但是注入的Bar应该保持不变.
一旦您开始尝试手动管理构图和生命周期,您应该开始欣赏DI容器提供的服务:)
许多DI容器可以做得比以上更多,但这些是核心服务.大多数集装箱提供configuring via either code or XML的选择.
关于容器的正确使用,Krzysztof Kozmic刚刚发布了a good overview.