在角度2中是否可以将许多类作为数组使用,因为它们都实现了接口?例如:
interface IWorker {
doWork();
}
class WorkerA implements IWorker {
doWork() {...}
}
class WorkerB implements IWorker {
doWork() {...}
}
class MainWorker {
constructor(private workers: IWorker[]) {
}
doWork() {
this.workers.forEach(w => w.doWork());
}
}
答案 0 :(得分:0)
您可以使IWorker
成为抽象基类而不是接口。 Angulars DI不支持接口,因为接口信息在运行时不可用。
或者,您可以使用字符串或OpaqueToken
作为键而不是接口。
字符串键示例:
@Injectable() // <<<=== required if DI should inject parameters
class MainWorker {
constructor(@Inject('IWorker') private workers: IWorker[]) {}
doWork() {
this.workers.forEach(w => w.doWork());
}
}
要将WorkerA
和WorkerB
作为数组传递给MainWorker
,需要在useMulti: true
providers: [
{provide: 'IWorker', useClass: WorkerA, useMulti: true},
{provide: 'IWorker', useClass: WorkerB, useMulti: true},
]