ProvideIn-我什么时候应该使用这个新的Angular 6功能?

ProvideIn-我什么时候应该使用这个新的Angular 6功能?,angular,angular6,Angular,Angular6,在新版本中,添加了Angular 6。我想知道我什么时候应该用它。我是否应该仅将其用于核心模块的服务 当我尝试在导入到SomeCustomModule的服务中使用它时: @Injectable({ providedIn: SomeCustomModule, }) 我收到警告:检测到循环依赖项中的警告 Using providedIn Beginning with Angular 6.0, the preferred way to create a singleton service is

在新版本中,添加了Angular 6。我想知道我什么时候应该用它。我是否应该仅将其用于核心模块的服务

当我尝试在导入到SomeCustomModule的服务中使用它时:

@Injectable({
  providedIn: SomeCustomModule,
})
我收到警告:
检测到循环依赖项中的警告

Using providedIn
Beginning with Angular 6.0, the preferred way to create a singleton service is to set providedIn to root on the service's @Injectable() decorator. This tells Angular to provide the service in the application root.

src/app/user.service.ts
content_copy
import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class UserService {
}
For more detailed information on services, see the Services chapter of the Tour of Heroes tutorial.

NgModule providers array
In apps built with Angular versions prior to 6.0, services are registered NgModule providers arrays as follows:


@NgModule({
  ...
  providers: [UserService],
  ...
})
If this NgModule were the root AppModule, the UserService would be a singleton and available throughout the app. Though you may see it coded this way, using the providedIn property of the @Injectable() decorator on the service itself is preferable as of Angular 6.0 as it makes your services tree-shakable.
通常,您只需要providedIn提供服务,forRoot()/forChild()进行路由。但是,了解forRoot()如何工作以确保服务是单例的,这将在更深层次上为您的开发提供信息

如果一个模块同时定义了提供者和声明(组件、指令、管道),那么在多个功能模块中加载该模块将复制服务的注册。这可能会导致多个服务实例,并且该服务将不再作为单例运行

There are multiple ways to prevent this:

Use the providedIn syntax instead of registering the service in the module.
Separate your services into their own module.
Define forRoot() and forChild() methods in the module.
也许这对你有帮助。可能重复的