【问题标题】:Angular dependecy injection lookup and module injector hierarchyAngular 依赖注入查找和模块注入器层次结构
【发布时间】:2021-02-18 15:54:39
【问题描述】:

据我了解,每个 Angular 模块都有自己的注入器。

但是在编译过程中,所有模块都是merged 合二为一。

关于导入模块的最大困惑是开发人员 认为他们建立了等级制度。这可能是合理的假设 导入其他模块的模块成为父模块 它的进口。然而,事实并非如此。合并所有模块 在编译阶段。因此没有层次结构 被导入的模块和被导入的模块之间的关系 进口

因此,如果模块之间没有任何层次关系,则不清楚来自所有合并模块的注入器如何形成模块注入器层次结构? - 如果在一个根模块中声明所有服务也是一样的 - 在这种情况下,层次关系是什么?

更新 1: 来自 Daniel Perales 提供的link 如下:

  1. 模块注入器树(层次结构)是与 fixing 的组件注入树一起引入的,bug 具有延迟加载的模块。

  2. Angular 确实将所有模块服务提供者合并到一个 AppModule 工厂中,该工厂“返回包含所有合并提供者的模块定义。”

因此,看起来模块注入器层次结构中的*元素是 AppModule 工厂,以下元素是延迟加载模块的注入器定义。

有什么想法吗?

【问题讨论】:

    标签: angular dependency-injection


    【解决方案1】:

    Angular DI 是一个非常复杂的主题,它的完成方式已经随着版本的变化而演变。在现代 Angular 中,使用“在根目录中提供”的语法提供服务是安全的选择,以允许摇树并避免陷阱,并且仅在某些特定情况下,在模块或组件的提供者数组中手动​​执行。

    这里有两篇关于这个主题的好文章:

    https://indepth.dev/what-you-always-wanted-to-know-about-angular-dependency-injection-tree

    https://indepth.dev/posts/1261/what-you-always-wanted-to-know-about-angular-dependency-injection-tree

    【讨论】:

    • 感谢提供的链接!让我们看看可能有人会评论更新