AngularJS - AUTO模块和$ injector

时间:2014-02-07 16:56:09

标签: angularjs dependency-injection autowired callstack

this page上,Angular文档将AUTO模块描述为:

Implicit module which gets automatically added to each $injector.

然而,$injector位于此AUTO模块中。

AUTO
    $injector
        AUTO
            $injector ...

显然我错过了什么。

AUTO模块与angular.module()的关系如何,以及$injector在哪里?

angular.module()
    AUTO
        $injector

这是有道理的,但是那些暗示将AUTO添加到$injector的文档没有意义。我想知道我是否误解了一些东西。所以我的问题是,我是否误解了什么?

2 个答案:

答案 0 :(得分:4)

AUTO基本上用$ provide和$ injector连接模块。 $ injector引用自身,所以$ injector === $ injector.get('$ injector')。它通过在Angular上下文之外构建模块并手动推送$ injector和$ provide来避免鸡/蛋情景。从那时起,模块可以使用$ provide,$ injector等。您将永远不会引用显式名为“AUTO”的模块,但是您通过angular.module创建的任何模块都将具有$ injector和$ provide。其他服务来自'ng'模块,但必须建立它的AUTO部分,因此有一个DI容器可供使用。

答案 1 :(得分:0)

有两个注射器,一个是内部注射器,另一个是外部注射器:

  

instanceInjector存储系统中实例化服务的列表。它用空对象初始化。 providerInjector维护未实例化的服务列表。

angular.injector方法可以创建一个实例:

angular.injector().get("$injector")

内置模块ng也可以:

angular.module("ng")._configBlocks[0][0]

<强>参考