angularjs1依赖注入简单实现

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');
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,629评论 18 139
  • 版本:Angular 5.0.0-alpha 依赖注入是重要的应用设计模式。它使用得非常广泛,以至于几乎每个人都称...
    soojade阅读 2,986评论 0 3
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,756评论 25 707
  • 1、不是因为有了希望才坚持,而是因为坚持才有了希望! 2、不是因为有了机会才争取,而是因为争取了才有机会! 3、不...
    犯丶阅读 192评论 0 0
  • 标题看起来有些大,落笔有些难,记得曾经老师说过,少一点“大哉问”这种终极命题问,多一些具体到毫微的小问题,从小往大...
    诗沐阳阅读 192评论 0 0