providedIn any 和 root 有什么区别

What is the difference between providedIn any and root

在 Angular 9 中,可注入装饰器选项 providedIn 有一个名为 any 的新值。 rootany 有什么区别?

在我使用 any 的情况下,服务是否被视为单例?

@Injectable({providedIn: 'any'})
class UsefulService {
}

rootany 之间的区别 offical documentation :

  • root : 大多数应用程序中的应用程序级注入器。

  • platform : 所有人共享的特殊单例平台注入器 页面上的应用程序。

  • any : 接收解析的NgModule注入器。

更多详情请参考此article

在我使用 any 的情况下,服务是否被视为单例? -

angular 9 引入新的可注入装饰器选项 ProvidedIn 除了之前的 root 和模块选项,现在我们有两个额外的选项 platform , any

root— This tells Angular to provide the service in the application root level and the service will be created once (singleton service ) and provide the same instance in every module that injects the token.

any— Provides a unique instance in every module (including lazy modules) that injects the token.

platform— Specifying providedIn: 'platform' makes the service available in a special singleton platform injector that is shared by all applications on the page.

a detailed look at Angular's 'root' and 'any' provider scopes

我认为提供的答案不是很清楚。但是,@jkonst、@schrödingcöder 和@Bruce 在评论中是正确的。

对于 Google、

发送到这里的任何人

any 不在每个模块中提供唯一实例。 (应该只在每个共享模块中说)

这意味着在每个 注入范围

中有一个实例

来自 https://angular.io/guide/providers

With providedIn: 'any', all eagerly loaded modules share a singleton instance; however, lazy loaded modules each get their own unique instance, as shown in the following diagram.