typescript - Singletontjänst i Angular 7
Jag har följande tjänst:
export abstract class ILoggingService {
// abstract functions here
}
export class LoggingService implements ILoggingService {
// service implementation
}
export class MockLoggingService implements ILoggingService {
// service implementation
}
Vilket jag tillhandahåller i de erforderliga modulerna med hjälp av:
@NgModule()
export class SomeModule {
providers: [
{ provide: ILoggingService, useClass: LoggingService }
]
}
Normal användning:
@Component({
selector: 'test-component',
template: ''
})
export class TestComponent {
constructor(private readonly loggingService: ILoggingService) {
// resolves to the correct instance (LoggingService), but not a singleton.
}
}
Jag misslyckas med att skapa en singleton för denna LoggingService. Jag har försökt skapa en LoggingServiceModule som använder forRoot()-strategin, vilket jag inte kunde få att fungera.
Jag är också osäker på hur man använder provideIn: 'root'-implementeringen, eftersom den måste tillhandahållas med { provide: ILoggingService, useClass: LoggingService }?
Hur kan jag kombinera implementeringen där jag mappar ett gränssnitt (abstrakt klass) till en konkret typ, och singeltonmönstret?
Svar #1
@Injectable({providedIn: 'root', useClass: LoggingService})
export abstract class ILoggingService {
// abstract functions here
}
Tack vare denna artikel
