首页 > 解决方案 > Angular 依赖注入查找和模块注入器层次结构

问题描述

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

但是,在编译期间,所有模块都合并为一个。

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

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

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

  1. 模块注入器树(层次结构)与组件注入树一起引入,用于修复延迟加载模块的错误。

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

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

有什么想法吗?

标签: angulardependency-injection

解决方案


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


推荐阅读