【发布时间】:2017-06-11 02:22:40
【问题描述】:
鉴于我导入到我的主应用程序模块 (BrowserModule) 中的 import { HttpModule } from '@angular/http';,并且鉴于在应用程序中我在各处执行 Http 服务的 DI,如果发生以下情况会发生什么:
- 我使用其他一些模块,例如我创建了一个功能模块或者我已经下载了 npm 包,我们称之为
CoolFeaturesModule -
CoolFeaturesModule本身正在导入HttpModule并注入Http服务
据我研究,每个模块都有自己的注入器,每个注入器都会注册一个Http 服务提供者。因此,我将拥有多个 Http 服务实例。那是对的吗?
【问题讨论】:
-
不,不正确。服务默认是单例的。一旦你使用了一个可注入对象,DI 就会为下次使用保留相同的实例。
-
嗯,这个引用来自:medium.com/@cyrilletuzi/…
Most importantly, do not mix components/directives/pipes and services in the same module. Why?以及该引用之后的段落。 -
好吧,如果模块是同级的,它们可以产生多个可注入实例,因为 DI 在树中找不到服务。您可以为此使用共享模块。拥有一个导入 Http 服务的模块,然后在需要该服务时使用该模块。因此,您的同一个服务实例将在任何地方使用。