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');
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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