为什么Angular允许你将$ provide服务注入配置块?

Vik*_*mar 5 javascript app-config angularjs angularjs-injector

根据Angular文档,我们只能在配置块中注入Providers(而不是实例). https://docs.angularjs.org/guide/module#module-loading-dependencies

但与此相反,Angular允许您注入$provide$inject尽管它们是单例服务实例.

https://docs.angularjs.org/api/auto/service/$provide

Ben*_*son 1

这引起了我的好奇,所以我做了一些研究。这是我发现的:

  1. $injector 无法注入配置块
  2. $provide 可以注入到配置块中

在代码中,2的原因是在创建(配置块中使用的注入器)之前将其$provide放入其中。这确保了它始终是. https://github.com/angular/angular.js/blob/master/src/auto/injector.js#L671providerCacheproviderInjectorproviderInjector

也就是说,我确实同意能够注入$provide配置块似乎与此处所述的可注入配置块的一般规则相矛盾:https ://docs.angularjs.org/guide/module#module-loading-dependency

尽管它被清楚地证明是您可以在这里执行的操作: https ://docs.angularjs.org/guide/module#configuration-blocks

$provide可能只是一般规则的一个例外。