1.依賴注入
依賴注入式實現控制反轉的一種軟件設計模式,即將被依賴的對象傳遞給依賴者,而不需要依賴者自己去創建和查找所需對象。
具體在angular中,依賴注入指的就是當一個控制器需要傳入一個服務時,不需要他自己去實現化這個服務,而是由依賴注入器來分析這個服務的依賴,來實例化這個服務,并傳入控制器中。
2.簡單實現
首先需要實現一個依賴注入器,負責管理各個服務之前的依賴和構造關系,同時包含有一個注冊函數,負責注冊構造函數和依賴,和一個注入函數負責實例化服務。
//依賴注入器
function Injector(){
this.service={};
}
Injector.prototype={
//注冊服務方法
regist: function(name,fn,depends){
//管理依賴的容器
this.service[name]={
constructor: fn,
depends: depends
};
},
//注入方法
inject: function(name){
var self=this;
(function ready(na){
if(!self.service[na].depends){
return self.service[na].constructor();
}
else{
var args=[];
self.service[na].depends.forEach(function(item){
args.push(ready(item));
});
return self.service[na].constructor.apply(null,args);
}
})(name);
}
};
實現思路就是每次需要注入一個服務時,遞歸地查找他的依賴項進行實例化。
這個依賴注入器的使用方法如下:
var injector=new Injector();
//注冊name服務,依賴于color服務
injector.regist('name',function(color){
console.log(color.ready);
},['color']);
//注冊color服務
injector.regist('color',function(){
return {
ready: 'green'
};
});
//注入name服務
injector.inject('name');