In the latest release of Angular 6, a service is registered in a module using the providedIn
property in the service metadata:
@Injectable({
providedIn: 'root',
})
export class HeroService {}
However the documentation still also refers to registering the service in the module providers
array in the module metadata just like we did in Angular 5:
@NgModule({
providers: [HeroService],
})
export class AppModule {}
So,
providers
array method be deprecated?Basically you can use either, But as per new CLI provideIn
will be automatically added while creating service
#providedIn
There is now a new, recommended, way to register a provider, directly inside the
@Injectable()
decorator, using the new providedIn attribute. It accepts'root'
as a value or any module of your application. When you use'root'
, your injectable will be registered as a singleton in the application, and you don’t need to add it to the providers of the root module. Similarly, if you useprovidedIn: UsersModule
, the injectable is registered as a provider of theUsersModule
without adding it to the providers of the module.This new way has been introduced to have a better tree-shaking in the application. Currently a service added to the providers of a module will end up in the final bundle, even if it is not used in the application, which is a bit sad.
For more information please refer here