经过一些角度注射器的研究,我能够对自己的问题给出详尽的答案。
从本质上讲,
$injector
在
config块和
provider构造函数中以及
$injector
其他各处,都有两个具有相同名称的不同服务,它们在内部提供程序/实例缓存中显式定义,并且在一起
$provide(此代码在提供程序缓存中定义,因此只能注入
config)
。
虽然一般不建议,因为可能的竞争条件,有可能接触到实例缓存和配置特定的进行内部服务
$provide和
$injector配置阶段结束后注射可供选择:
app.config(function ($provide, $injector) { $provide.value('$providerInjector', $injector); $provide.value('$provide', $provide);});可能的应用程序随时在配置服务提供商(如果可能)
app.run(function ($providerInjector) { var $compileProvider = $providerInjector.get('$compileProvider'); ...});在运行时定义新组件
app.run(function ($provide) { $provide.controller(...); ...});


