我读过在引导时注入应该让所有子级共享同一个实例,但是我的主组件和标头组件(主应用程序包括标头组件和路由器出口)都获得了我的服务的单独实例。
我有一个用于调用 facebook javascript api 的 FacebookService 和一个使用 FacebookService 的 UserService。这是我的引导程序:
bootstrap(MainAppComponent, [ROUTER_PROVIDERS, UserService, FacebookService]);
从我的日志来看,引导调用似乎完成了,然后我看到 FacebookService 然后在每个构造函数中的代码运行之前创建了 UserService,MainAppComponent、HeaderComponent 和 DefaultComponent:
原文由 Jason Goemaat 发布,翻译遵循 CC BY-SA 4.0 许可协议
杰森完全正确!这是由依赖注入的工作方式引起的。它基于分层注入器。
Angular2 应用程序中有几个注入器:
当 Angular2 尝试在组件构造函数中注入一些东西时:
因此,如果您想为整个应用程序创建一个单例,您需要在根注入器或应用程序组件注入器级别定义提供程序。
但是 Angular2 会从底部查看注入器树。这意味着将使用最低级别的提供程序,并且关联实例的范围将是此级别。
有关更多详细信息,请参阅此问题: