我正在观看关于依赖注入的这个课程视频,教师谈到了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();
}
答案 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容器相反。