私はMetaManagerクラスを持っている:を注入クラスの配列
@Injectable()
export class MetaManager{
constructor(private handlers:Handler[]){
console.log(handlers);
}
}
このクラスはハンドラとして登録するHandler[]
を必要とします。私がメタデータを取得したときよりも、私のハンドラ配列をループして、どちらがメタエントリをハンドリングできるかを調べます。文字列のエントリを使用して
(と:
は、ここに私が試してみました(と何が動作しませんでした)何か問題は、私はmain.tsで設定としてクラスの配列を提供することができないということである、と述べましたMetaManagerで@Provide('HANDLERS')
注釈:Handler[]
クラスプロバイダを使用
export const HANDLERS: HandlerConfig = {handlers: [<Handler>DebugHandler]};
bootstrap(AppComponent, [MetaManager, provide(HandlerConfig, {useValue: HANDLERS}) ]);
:
`bootstrap(AppComponent, [MetaManager,provide('HANDLERS', {useValue: [DebugHandler]}) ]);`
ハンドラを提供するインターフェイスを使用し
MetaManager
は、将来的に複数のハンドラを持っている必要がありますので、私はクラスの配列を提供したい
bootstrap(AppComponent, [MetaManager, provide(Handler[], [DebugHandler])]);
、通知、エラー、等...
EDIT:マルチプロバイダを使用して
ができます私No provider for Array! (ApiService -> MetaManager -> Array)
エラー:
メタmanager.ts:
@Injectable()
export class MetaManager{
constructor(private handlers:Handler[]){
console.log(handlers);
}
}
main.ts:
bootstrap(AppComponent,
[ MetaManager,
provide(Handler, {useClass: DebugHandler, multi: true}),
provide(Handler, {useClass: NotificationHandler, multi: true})]);
はい、でも何であれば、私はすべてのハンドラが登録を取得したいの?また、どのようにそれらのすべてを取得するには? – Supamiu
注入配列には、登録されているすべてのハンドラが含まれています。おそらく私はあなたの質問を誤解しました。私は自分の答えを更新しました... –
マルチアプローチでは、プロバイダを1つずつ登録する必要があります。このトークンのすべての登録プロバイダは、配列として提供されます... –