什么是DI容器?

时间:2018-06-06 10:52:41

标签: java dependency-injection inversion-of-control

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

下面的程序类是最简单的di-container吗?如果不是简单的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();
    }
}

这个类是di-container吗?

class Program {
    B b = new B(new A());
    b.doSmth();
}

1 个答案:

答案 0 :(得分:2)

根据Dependency Injection in .NET, second edition,DI容器是:

  

一个软件库,它提供DI功能并允许自动执行对象组合拦截终身管理中涉及的许多任务。 DI容器也称为控制反转(IoC)容器。 (§3.2.2)

至少,DI容器允许自动接线,即:

  

通过利用编译器提供的类型元数据和公共语言运行库,从抽象和具体类型之间的映射自动组合对象图的能力。 (§12.1.2)

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

从这个角度来看,您的Program不是 DI容器。 Program充当您的Compositoin Root,即:

  

应用程序中的一个(最好)唯一位置,其中模块组合在一起。 (§4.1)

在您的特定组合根中,您正在练习Pure DI,这是使用您的语言的new关键字手动编写对象图的做法,与使用DI容器相反。