打个比方。我们每家都要上网,上网是要用到光猫的。假设联通公司,提供了一个光猫,是这样的。
class guangmao{
constructor(){}
surfing(){console.log("你能上网了)}
}
联通公司已经帮你拉好了宽带,你直接调用就可以上网了,你这样做了
class shangwang{
myguangmao:guangmao;
constructor(){
this.myguangmao = new guangmao();
_surfing(){
this.myguangmao.surfing();
}
}
var myshangwnag = new shangwang();
myshangwang._surfing();
好了,你可以上网了。当然,不止你是这样在上网,有100万家,都是这样搞的。但是突然有一天,联通公司感觉这太亏了。没有收钱。所以联通公司说,你们必须提供自己的身份证,好方便以后我收钱。所以代码改成了这样
class guangmao{
constructor(id:string){}
surfing(){console.log("你能上网了)}
}
这个时候,你发现你直接用,不行,你要传如id;所以你改成这样
class shangwang{
myguangmao:guangmao;
constructor(){
this.myguangmao = new guangmao("你的身份证id");
_surfing(){
this.myguangmao.surfing();
}
}
var myshangwnag = new shangwang();
myshangwang._surfing();
当然了,不止你一个这样改,几百万人都这样改。是不是感觉很麻烦。这就影响到了几百万人。如果换算成几百万行代码。你光改这个方法你都可以干到退休。
我们称,某个类的运行是依赖于某个类的;也就是我们的上网类是依赖于光猫类的。
这个时候,有个光头,灵光一闪,发现可以这样搞。
class shangwang{
myguangmao:guangmao;
constructor(myguangmao:guangmao){
this.myguangmao = myguangmao;
_surfing(){
this.myguangmao.surfing();
}
}
var _guangmao = new guangmao("身份证序列id")
var myshangwnag = new shangwang();
myshangwang._surfing();
也就是说,联通公司收集了百万用户者的身份证,给每个人的光猫搞成单独的,这时使用人员就不用管那么多了,拿了就用。我们称这种就叫以来注入。简单的说,就是在实例化类时,将它的依赖项通过构造函数参数的形式注入到类的内部,就是依赖注入DI