我有一个BaseComponent
,需要使用Service_A
注入Service_B
或InjectionToken
:
export const SERVICE_TOKEN = new InjectionToken<Service_A | Service_B>('ServiceInjector');
...
export class BaseComponent {
constructor(
@Inject(SERVICE_TOKEN)
public service: Service_A | Service_B
) { }
}
有两个扩展BaseComponent
的组件:Component_A
和Component_B
。
对于他们每个人,我想注入他们相应的服务。
如果我在组件级别使用DI提供程序,这将很好地工作:
@Component({
selector: 'ui-component-a',
templateUrl: `../base.component.html`,
providers: [{
provide: SERVICE_TOKEN,
useClass: Service_A
}]
})
export class Component_A extends BaseComponent { }
@Component({
selector: 'ui-component-b',
templateUrl: `../base.component.html`,
providers: [{
provide: SERVICE_TOKEN,
useClass: Service_B
}]
})
export class Component_B extends BaseComponent { }
但是,如果我将Component_A
和Component_B
放入自己的模块中并在模块级别使用依赖项提供程序,则两个组件最终都将注入相同的服务:
@NgModule({
providers: [{
provide: SERVICE_TOKEN,
useClass: Service_A
}],
declarations: [
Component_A
],
exports: [
Component_A
]
})
export class A_Module { }
@NgModule({
providers: [{
provide: SERVICE_TOKEN,
useClass: Service_B
}],
declarations: [
Component_B
],
exports: [
Component_B
]
})
export class B_Module { }
是否可以使用相同的InjectionToken
解决具有不同类的多个模块中的依赖关系?