为啥 Angular 允许您将 $provide 服务注入到配置块中?

Posted

技术标签:

【中文标题】为啥 Angular 允许您将 $provide 服务注入到配置块中?【英文标题】:Why does Angular let you inject the $provide service into config blocks?为什么 Angular 允许您将 $provide 服务注入到配置块中? 【发布时间】:2017-11-12 05:01:47 【问题描述】:

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

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

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

【问题讨论】:

了解什么是提供者:docs.angularjs.org/guide/providers(服务、工厂、提供者等)。 (此外,Angular 中的所有服务都是单例实例)。 @ippi,我认为提出问题的人已经阅读了文档。所以,如果不能回答,请不要让人们失去动力。 #StayAway 【参考方案1】:

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

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

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

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

即使它被清楚地证明是你可以在这里做的事情: https://docs.angularjs.org/guide/module#configuration-blocks

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

【讨论】:

以上是关于为啥 Angular 允许您将 $provide 服务注入到配置块中?的主要内容,如果未能解决你的问题,请参考以下文章

您将哪种 Java 类型用于 JPA 集合,为啥?

为啥.net网站访问出错 provider: TCP 提供程序, error: 0 -

为啥诸如 :not() 和 :has() 之类的函数伪函数允许引用参数?

angular 2 离线模板编译出错 - @angular/http 没有导出的成员 HTTP_PROVIDERS

Angular Provider 之 useFactory

ionic准备之angular基础———服务provider 和 factory