2016-07-13 11 views
0

角度2/ionic 2プロジェクトでは、次の「星座」があります。角度2でHttpServiceのプロバイダがありません

Component1 -> Service1 -> Service3 
Component2 -> Service2 -> Service3 

(ここで - >は、 "使用" または "呼び出し" のようなものを意味する)

コンポーネントのプロバイダ配列にService3を注入せずに、私は常にエラー

No Provider for Service3 

に直面していますサービスを2番目のサービスに注入する方法はありますか?そのすべてをコンポーネントに注入する必要はありませんか?依存関係をコンポーネントに明示的にすべてリストする必要なく、依存関係をどのように管理するか

私は Inject services in another service angular 2で説明している限り、私のプロジェクトは、小さなとどまるように、すべてのサービスの依存関係をリスト大したがない、クーゼのうち

を働いていなかったとして、サービスにサービスを注入しようとした

import {Service1} from '../../../providers/service1'; 
import {Service2} from '../../../providers/Service3'; 

@Component({ 
    templateUrl: '...', 
    providers: [Service1, Service3]}) // <= here I would like to not list Service2 

export class Component1 { 
} 

コンポーネントはそれほどスケーラブルではありません。

+0

シングルトンのようなサービスですか?次に、ルートコンポーネントの 'providers'配列か' bootstrap'呼び出しの中にそれらの全てをリストすることを考えてもよいでしょう。 – rinukkusu

+0

はい、少なくとも私の例ではService3はシングルトンでなければなりません。これは実際にはルートコンポーネントにリストされている受け入れ可能なソリューションなので、一度だけリストする必要があります。答えとアイデアのためのThx。 –

+0

In Angularは、注入されたすべてのサービスは、デフォルトではシングルトンです。 –

答えて

0

@rinukusuによって質問が解決されました。何度も何度もサービスを注入するのではなく、彼はアプリケーションのルートにこれらすべての「共有」サービス(私の例ではService3のような)を注入することを提案しました。

まだコンポーネントにサービスを一度含めると、すべてのサービスの依存関係をリストする必要がありますが、少なくとも私のコードを複製する必要はありません。

のでapp.ts

import {Service2} from '../../../providers/service2'; 

@Component({ 
templateUrl: 'build/app.html', 
providers: [Service2] 
}) 

例えば(私の例ではサービス1のような)サービス

import {Service2} from './service2'; 

@Injectable() 
export class Service1 { 

constructor(private service2:Service2) { 

} 
0

に注入は、コンポーネント内部で階層的に動作しますので、あなたがしたい場合は、サービスがあることを同じ階層レベルで消費される場合、そのサービスはそのレベル以上に提供する必要があります。あなたの場合は、アプリケーションのブートストラップにこのService3を提供する必要があります。

関連する問題