2017-01-24 3 views
1

で `deps`プロパティを使用angular.ioからコードスニペットです:なぜここDI

{ provide: RUNNERS_UP, useFactory: runnersUpFactory(2), deps: [Hero, HeroService] } 

... 

export function runnersUpFactory(take: number) { 
    return (winner: Hero, heroService: HeroService): string => { 
    /* ... */ 
    }; 
}; 

depsプロパティは、ここで使用されている理由私の質問はありますか? depsを使用する一般的なケースは何ですか?

+1

マニュアルを参照してください。https://angular.io/docs/ts/latest/api/core/index/FactoryProvider-interface.html、これはかなり網羅的です。 – estus

+0

@estus、ありがとう、私はマニュアルを見た。私は通常、より広範な画像を得るために質問をしますが、マニュアルでは工場の提供者に使用されているとしか書かれていません。しかしそれはそれに限定されていますか?他のユースケースはありますか?これらは私の頭の中にある質問です –

+0

はい、それは工場に限られています。 TSの利点は、プロパティーがどこからも出てこないことです。インターフェースで定義されています(FactoryProviderはここにあります)。 – estus

答えて

4

これは角度依存性注入に、runnersUpFactoryによって返されたファクトリ関数に注入する必要のある依存性を通知する方法です。サービスについては

は、それが(@Component()@Directive()、および@Pipe()に同じ)このクラスのコンストラクタのパラメータを分析する必要があることDIを伝えるために@Injectable()クラスがありますが、これは機能のために働くことはないようです。そこで彼らはdepsパラメータを導入しました。

DIは、キーHeroを使用してプロバイダを検索し、HeroServiceを使用してプロバイダを検索し、同じ順序でファクトリ関数にパラメータとして渡します。

https://angular.io/docs/ts/latest/api/core/index/FactoryProvider-interface.html

deps : any[] インジェクタによって解決する必要があるトークンのリスト。値のリストは、useFactory関数の引数として使用されています。

+0

これは基本的に 'useFactory'が使われている場合にのみ関係します。他のプロバイダが 'useClass'、' useValue'、 'useExisting'のように使用されている場合、目的はありませんか? –

+0

正確に - 'useFactory'のためにのみ –

+0

素晴らしい、ありがとう。ただの迅速なフォローアップ、私の前のコメントで言及したもの以外に他のプロバイダがありますか?私は角2 –

関連する問題