将许多类作为数组

时间:2017-01-22 10:01:17

标签: angular typescript

在角度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());
    }
}

1 个答案:

答案 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());
    }
}

要将WorkerAWorkerB作为数组传递给MainWorker,需要在useMulti: true

注册
providers: [
  {provide: 'IWorker', useClass: WorkerA, useMulti: true},
  {provide: 'IWorker', useClass: WorkerB, useMulti: true},
]

另见What is in Angular 2 Opaque Token and What's the Point?