2016-08-06 9 views
5

私は工場のプロバイダを使用する必要がある状況を想像することはできません。角度2ファクトリ関数を使用する場合

公式ドキュメントhttps://angular.io/docs/ts/latest/guide/dependency-injection.htmlによれば、状況は、1つの別のサービス(サービス)内からサービス(サービスB)にアクセスすることができないかもしれないということである、しかし、工場の機能がない(持っていますサービス-へのアクセス)。では、いつこのようなことが起こるのでしょうか? Angulars DIはMyServiceをインスタンス化できる場合

+0

リンク先のドキュメントに記載されているテキストはどこにありますか? "他のサービス(service-a)の中からサービス(service-b)にアクセスできないかもしれませんが、工場ファンクションは" –

+0

"です。これは私の解釈です。https:// angular .I/docs/ts/latest/guide/dependency-injection.html#!#injector-providersは、「なぜ?私たちも知らない。 – johncol

答えて

6

あなただけのクラスに

providers: [MyService] 

これだけ作品を渡すことで、プロバイダに登録することができます。

あなたが例えば

@Injectable() 
class MyService { 
    constructor(private http: Http, private String configVal) {} 
} 

を持っている場合Stringは(プリミティブ型は、プロバイダキーとして動作しないプロバイダに対して有効なキーではないので、次にDIはインスタンスを作成することができではありません。

あなたがこれを必要とする場合

は、あなたが完全にどのように新しいアドインを制御

providers: [ 
    { 
     provide: MyService, 
     useFactory: (http) => { 
     return new MyService(http, 'http://mydbserver.com:12345'); 
     }, 
     deps: [Http] 
    } 
] 

この方法のように、工場の機能を使用することができます軸が作成され、角度DIはHttpのインスタンスでファクトリ関数を呼び出す必要があることだけを知る必要があります。

+0

私はそれを得るが、例えば、 MyConfigServiceというサービスを簡単に作成することができます。このサービスは、これらの設定値をMyServiceに注入します。だから私は、実際に角膜骨格がこのようにプロバイダを定義できるもう一つの理由があるのだろうかと疑問に思っています。あなたの答えはとにかくありがたいです! – johncol

+1

例えば、 'Injectable()'デコレータを持たないクラスを注入したい場合、ソースを所有していないので追加できません。私はいくつか他のものがあると確信しています。 –

関連する問題