对于DI的理解:也就是说,我只要指出需要哪些对象,然后就有人把这些对象给我,而这个‘人’可能就是一个应用框架,也可能是一个测试容器,我不关系是谁,也不用关心他怎么得到这个对象的,这个‘人’,专业点的说法,就是‘容器’。
而这边“我需要那些对象”的方式,也有很多种,比如可以直接声明一个属性,或者写一个注释,或者写一个配置文件来声明依赖关系,或者在函数的参数声明,目前angular所采用的方式是函数参数的形式,和一种变形的注释形式来方式以防止文件压缩导致破坏名称。
angular中的DI
在angular 中,所有主要编程元素都需要通过某种方式注册进去,例如 myModule.service('serviceName',function(){})
实际上就是把后面的函数加入到一个容器中,要注意的是:angular全面实现了延迟初始化,也就是说,当这个对象没有被人需要的时候,他是不会被创建出来的,这样对于提升性能有定帮助,尤其是加快的启动速度。
在angular中,是不存在正真的全局对象,所以你可以方向在同一个页面使用多个app,而不用担心互相干扰 ,但是容器有需要一个容器存放,在angular中,这个容器就是module,angular.module('someModule',['dep1','dep2']).
根据DI的原理:被注入的对象通常是单例的,因为创建了一个,就可以始终使用他,不需要多次创建,因此,如果你需要在angular中跨controller共享数据或者通讯,那么你就可以创建一个service/factory/provide,然后把他们分别注入到两个controller 中去,而这两个controller就会共享这个对象了。