延迟加载不创建一个单独依赖关系树 - 至少,不是在你所描述的方式。
正如你可能知道,角的依赖注入系统实际上是注射器的一棵树 - 一个视图层次结构中的每个组件。当你请求一个依赖项时,Angular走这个注入器树,从请求依赖项的组件开始,直到找到能够提供依赖项的第一个注入器。 如果你需要它,这给你很大的力量,因为在组件树的任何级别上,你都可以指定一个提供者来依赖组件,并让那个组件获得它自己的依赖实例。此外,该组件的任何子项也将共享相同的依赖实例。
那的层次依赖注入相对于组件的基本工作大纲。但是,对于模块来说,情况有点不同。默认情况下,NgModule提供的任何依赖项都会添加到根注入器中,这意味着该依赖项的单个实例将被整个应用程序共享。这是一个例外,如果NgModule延迟加载。在这种情况下,惰性加载模块提供的依赖关系不会被添加到根注入器。相反,这些依赖关系将被添加到延迟加载模块的根组件中(我很难学会这一点 - 如果你的懒惰加载模块有多个“根组件”,每个“根组件”都会得到它自己的实例依赖)。
因此,它仍然是相同的基本层次 - 它只是渴望已加载的模块及其依赖添加到根注射器,而懒加载的模块他们添加到他们的模块的根组件。另外,如果延迟加载的模块导入一个也提供依赖关系的NgModule(例如您的SharedModule),那些依赖关系也将被添加到该模块的根组件。 (请注意,如果SharedModule也是急切加载的,它的依赖关系也将被添加到根注入器 - 导致这些依赖关系的多个实例可用)。
最后一点就是您看到您所看到的行为的原因。当您的懒惰模块导入SharedModule时,SharedModules提供的依赖项会被添加到惰性模块的根组件 - 导致这些依赖项的重复实例。
我可以解释你。列出所有问题 – Aravind
我的问题是为什么它工作,即使我没有按照其他文章的步骤。即我没有导入共享模块作为.forRoot() – Sridhar