延迟加载和提供者策略

Lazy loading and providers strategy

现在,使用 Angular v5,同时使用延迟加载,我将所有提供程序加载到 app.module.ts 中,我想这可能不是最好的策略,因为这不会加快我的速度应用程序启动时间,特别是因为我有大约 50 个自定义提供程序(不要评判我;))。

因此我问自己是否真的应该为我的所有应用程序加载所有这些,或者我是否应该只在我只使用它们的地方加载它们?

我猜最好只在我真正使用它们的地方加载提供程序。

但在这种情况下,我完全不清楚如何解决以下构造:

假设我有三个页面(A、B 和 C),它们有自己的模块和三个提供商(1、2 和 3)。

A use 1
B use 1, 2, 3
C use 1, 2

提前感谢任何帮助,将不胜感激

更新

不确定我是否正确理解了 angular 文档,但这就是目标,应该为所有应用程序加载提供程序,对吗?

https://angular.io/guide/ngmodule-faq#q-component-scoped-providers

2018 年更新

注入策略随着 Angular v6 的引入而发展。根据文档,可以使用 providedIn 来指定应该在哪个模块中使用服务。参见 https://angular.io/guide/dependency-injection

您应该创建一个共享模块来增强您的提供者 2 并且 B 和 C 模块包含在它们的依赖项中。

编辑:您不需要导出提供商。

答案是你应该在 app.module.ts 中添加你的提供者,因为它是一个单独的服务。这是来自 angular dependency injection doc:

Dependencies are singletons within the scope of an injector

这意味着当您在 app.module.ts 中声明您的提供者时,它将在整个应用程序中是单例的,并且注入的每个模块都将共享它的相同实例。
当您在单独的模块中声明您的提供者时,即 B.module.tsC.module.ts,您的 B page 将使用提供者实例,而 C page 将使用 另一个 供应商实例。这不是提供者的目的。