Проблема заключается в том, что SecretService представляет собой сборку со сборкой в последний импортированный модуль UniversityModule в модуле приложения, поэтому, если вы хотите, чтобы SecretService обновлялся корректно с помощью BaseService, вы должны предоставить как BaseService, так и SecretService для университета и школьного компонента, что-то вроде этогов school.component.ts:
import { SchoolService } from './school.service'
import { BaseService } from '../shared/base.service'
import { SecretService } from '../shared/secret.service'
@Component({
selector: 'app-school',
template: `SchoolName :: <app-shared></app-shared>`,
providers: [
{ provide: BaseService, useClass: SchoolService },
SecretService]
})
export class SchoolComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
и в university.component.ts
import { UniversityService } from './university.service'
import { BaseService } from '../shared/base.service'
import { SecretService } from '../shared/secret.service'
@Component({
selector: 'app-university',
template: `UniversityName :: <app-shared></app-shared>`,
providers: [{ provide: BaseService, useClass: UniversityService },
SecretService]
})
export class UniversityComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
Но почему вы хотите обернуть базовый сервис в SecretService вместо непосредственного использования BaseService в совместно используемом компоненте?
Используя BaseService, как это в shared.component.ts
import { Component, OnInit } from '@angular/core';
import { BaseService } from './base.service'
@Component({
selector: 'app-shared',
template: `{{name}}`
})
export class SharedComponent implements OnInit {
name: string
constructor(private ss: BaseService) {
this.name = ss.getName()
}
ngOnInit() {
}
}
Используя BaseService, вы решите эту проблему внедрения без каких-либо обходных путей для SecretService