2017-03-27 6 views
3

私はTypescriptでAngular2を学んでいますが、問題があります。Angular2すべてのインターフェイス実装をリストとしてサービスするにはどうすればよいですか?

私は、同じインタフェースを実現する2つのクラスを持っています。それらをサービスとしてリストに挿入するにはどうすればよいですか?

私は約opaquetoken https://angular.io/docs/ts/latest/guide/dependency-injection.html#opaquetoken

を読んしかし、私はそれを使用する必要があるとその使用方法かどうかは知りません。任意の助け

export interface CheckerInterface { 
    check(text : string) : boolean 
} 

export class Checker1 implements CheckerInterface { 
    check(text : string) : boolean { 
    //do something 
    return true; 
} 

export class Checker2 implements CheckerInterface { 
    check(text : string) : boolean { 
    //do something 
    return true; 
} 

@Injectable() 
export class Service { 

    constructor(private checkers: CheckerInterface[]) { //?? 
     checkers.foreach(checker => checker.check(somestring)); 
    } 

} 

ありがとう!

+0

を注入する際CHECKERSトークンを使用する必要がありますか?なぜあなたはそれをサービスに注入しようとしていますか? – Aravind

答えて

1

配列をプロバイダーとして追加するか、構成のmulti: trueを使用する必要があります。

export const CHECKERS = new OpaqueToken('one'); 

@NgModule({ 
    providers: [ 
    { provide: CHECKERS, useValue: [new Checker1(), new Checker2()] }, 
    ] 
}) 

それとも

@NgModule({ 
    providers: [ 
    { provide: CHECKERS, useClass: Checker1, multi: true }, 
    { provide: CHECKERS, useClass: Checker2, multi: true }, 
    ] 
}) 

もう一つは、あなたが角度が必要な場合は、それらが自分の依存関係を注入することができるように、それらを作成してみましょうとして、おそらく望ましいです。

次に、あなたはちょうどあなたがインターフェイスを実装する理由を

import { Inject } from '@angular/core'; 
import { CHECKERS } from './wherever'; 

constructor(@Inject(CHECKERS) private checkers: CheckerInterface[]) { 
+0

これはわかりやすいですが...これは私の愚かな質問かもしれません...私はプロバイダをapp.module.tsにして、私はこの2行を私の他のプロバイダに追加しました。 const CHECKERS = new OpaqueToken( 'checkers')も追加しました。ライン。しかし、コンストラクタ(@Inject(CHECKERS)[...]は別のファイルにあり、 'CHECKERS'という名前を見つけることができません)私は初心者レベルです| | – user1803183

+0

あなたはそれをエクスポートしてインポートする必要があります。 –

+0

さて、今日はたくさんのことを学びました。ありがとう!しかし、私はエラーが発生して何かが間違っているのだろうかと思います。サービスのすべてのパラメータを解決できません:(?)。 – user1803183

関連する問題