由于孩子的知识,我试图将提供者延迟加载到父母中。想象一下:
@Injectable()
export class ServiceA {
constructor(
@Inject(MY_TOKEN)
private serviceB: ServiceBImpl
) { }
run() {
this.serviceB.b();
}
}
ServiceBImpl
只是一个接口
export let MY_TOKEN = new InjectionToken<ServiceBImpl>('MY_TOKEN');
export interface ServiceBImpl {
b();
}
ServiceA
加载到根目录AppModule
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule
],
providers: [
ServiceA
],
bootstrap: [AppComponent]
})
export class AppModule { }
MY_TOKEN
加载在子注射器中。但是,我不要求MY_TOKEN
在这个组件中,我要求ServiceA
.
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
providers: [
{ provide: MY_TOKEN, useClass: ServiceB }
]
})
export class AppComponent {
title = 'app';
constructor(
public serviceA: ServiceA
) {
// Does not work
this.serviceA.run();
}
}
这不起作用。
让我明确一点,我不想ServiceA
在组件级别的提供程序中拥有它,而是从AppModule
.