forRoot模式如何确保整个应用程序的单身人士?

时间:2018-02-14 16:12:39

标签: angular

无论是阅读documentation还是学习Angular's metadata resolver的源代码,都无法让我了解Angular在模块导入其他模式时如何处理forRoot模式。

目前我了解与此问题相关的以下事项:

  • 使用forRoot模式的目的是在app
  • 中添加单例提供者/服务
  • 当一个模块(例如AppModule)导入其他一个模块时,它的提供者对整个应用程序都是可用的(doc
  • 当模块提供提供者和声明时,我们需要将其导入不同的模块,而不仅仅是在应用程序中
  • 当在延迟加载的模块中进行此类导入时,这会导致应用程序中有新的提供程序实例(而不是预期的单例)(@GünterZöchbauer的comment

好吧,为了确保提供者作为单身人士的愿景,我们需要使用提供者和声明重构目标模块,以便从@NgModule 删除到ModuleWithProviders.providers。因此,当延迟加载的模块导入此模块时,其提供程序的新实例未初始化。

但是文档中的example of code打破了我对它的看法。在非应用程序模块的@NgModule中有providers数组。

问题是为什么模块是在app和延迟加载的模块中导入的,Angular初始化其提供者的dublicates,但是当存在forRoot模式时,这种行为不会发生?导入模块有哪些区别(对于延迟加载模块),该模块具有forRoot模式的静态实现而没有?

0 个答案:

没有答案