什么是DI容器?

Abd*_*mon 10 java dependency-injection inversion-of-control

我正在观看有关依赖注入的课程视频,并且讲师讨论了di-container但没有详细解释,现在我读了一些文章,并且想确认一下我现在做对了。下面是简单的程序,我的问题是,

下面的Program类是最简单的di容器吗?如果不是这样的话,简单的di-container会怎么样

interface  Implementable {
    void doSmth();
}

class A implements Implementable {

    @Override
    public void doSmth() {

    }
}

class B {

    private Implementable i;

    public B(Implementable implementable) {
        this.i= implementable;
    }

    public void doSmth(){
        i.doSmth();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是类双层容器吗?

class Program {
    B b = new B(new A());
    b.doSmth();
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*ven 7

根据依赖注入的原则,实践和模式,DI容器为:

一个软件库,提供DI功能,并可以自动执行与对象组成拦截生命期管理有关的许多任务。DI容器也称为控制反转(IoC)容器。(第3.2.2节)

至少,DI容器允许自动装配,即:

通过利用编译器和公共语言运行时提供的类型元数据,可以从抽象和具体类型之间的映射自动组成对象图。(第12.1.2节)

通常,这意味着DI容器将分析类型的构造函数并将依赖项注入其中,而无需手动指定每个构造函数参数。

从这个角度来看,您的Program课程不是 DI容器。Program充当您的复合根,即:

在模块中组合在一起的应用程序中(最好)的唯一位置。(第4.1节)

在您的特定“合成根”中,您正在练习Pure DI,这是一种使用new语言的关键字而不是使用DI容器来手动组成对象图的实践。

  • 开头引用的书籍有一些免费内容。作为试图理解 DI 的人,它非常有帮助:https://freecontent.manning.com/dependency-injection-writing-maintainable-loosely- Coupled-code/ (3认同)