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