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

时间:2017-06-10 06:26:06

标签: javascript angularjs app-config angularjs-injector

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

但与此Angular相反,您可以注入$provide$inject,尽管它们是单例服务实例。

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

1 个答案:

答案 0 :(得分:1)

这让我很好奇所以我做了一些研究。这是我发现的:

  1. $ injector不能注入配置块
  2. $ provide可以注入配置块
  3. 在代码中,2的原因是kafka-python在创建$provide(配置块中使用的注入器)之前放入providerCache。这可确保它始终是providerInjector的已知提供者。 https://github.com/angular/angular.js/blob/master/src/auto/injector.js#L671

    那就是说,我同意能够将providerInjector注入配置块似乎与关于注入此处所述配置块的内容的一般规则相矛盾:https://docs.angularjs.org/guide/module#module-loading-dependencies

    尽管明确证明这是你可以在这里做的事情: https://docs.angularjs.org/guide/module#configuration-blocks

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