With Angular 6, below is the preferred way to create singleton services:
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class UserService {
}
From Angular doc: When you provide the service at the root level, Angular creates a single, shared instance of HeroService and injects into any class that asks for it. Registering the provider in the @Injectable metadata also allows Angular to optimize an app by removing the service if it turns out not to be used after all.
Also,
providers: [
// no need to place any providers due to the `providedIn` flag...
]
So, does that mean we no more need CoreModule? We can import services and other common modules directly into AppModule.