2016-09-06 11 views
5

CalculationServiceというサービスがあります。このサービスは@Injectable()と宣言されています。このサービスは、注入されたクラスをたくさん使用します。それぞれのクラスは@Injectable()と宣言され、@Inject()を介してCalculationServiceのコンストラクタに渡されます。Angular 2 - NgModuleとしてのサービスは、すべてのプロバイダを宣言する必要はありませんか?

今、私は私のアプリ内サービスを使用する場合、AppComponentは、この(便宜上、私は活字体の輸入を省略)のようになります。

@NgModule({ 
    declarations: [AppComponent], 
    imports: [ 
    BrowserModule, 
    RouterModule.forRoot(routeConfig), 
    PlannerModule 
    ], 
    providers: [ 
    InputService, 
    Bausparen, 
    BausparenInput, 
    Girokonto, 
    GirokontoInput, 
    Immobilien, 
    ImmobilienInput, 
    Lebensversicherung, 
    LebensversicherungInput, 
    Rentenversicherung, 
    RentenversicherungInput, 
    Tagesgeld, 
    TagesgeldInput, 
    Termingeld, 
    TermingeldInput, 
    Wertpapiere, 
    WertpapiereInput 
    ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { 
} 

私はすべてにアクセスする必要はありませんプロバイダは直接appモジュールで宣言しました。必要な唯一のクラスはCalculationServiceですが、サービスでプロバイダを宣言する方法はわかりません。

サービスをモジュールとしてリファクタリングする、つまりCalculationService内でプロバイダを宣言する方法はありますか?または、私は@Injectable()(Bausparenなど)をすべて削除し、Calculation Service内でオブジェクトを作成して、プロバイダが不要になるようにする必要がありますか?

答えて

3

サービス上またはサービス内にプロバイダを登録することはできません。モジュールまたはコンポーネントでのみ登録できます。

あなたのサービス用のモジュールを作成してから、imports: [...]にモジュールを追加するだけで、すべてのプロバイダがグローバルに登録されます。

それは怠惰なロードされたモジュールである場合、あなたは私がNgModuleとして私のサービスを宣言すると、次に何が `declarations`と` bootstrap`に置くために、forRoot()

+0

を実装してインポートする必要がありますか? –

+1

実際に '宣言 'なしでモジュールを試したことはありませんが、' declarations'と 'bootstrap'を省略しようとします。 –

関連する問題