私のAngular 7アプリに次のアプリ構造があります:
AppModule
DashboardModule
DashboardChild1
DashboardChild2
DashboardChild3
DashboardService
AdminModule
AdminChild1
AdminChild2
AdminChild3
ダッシュボードサービスをDashboardModule
でのみ使用できるようにしたいので、このリンク providedin-and-ngmodules をたどりました。
これが私のDashboardService
です。
import { Injectable } from '@angular/core';
import { DashboardModule } from './dashboard.module';
@Injectable({
providedIn: DashboardModule
})
export class DashboardService {
.......
}
DashboardChild1コンポーネントでそのサービスを使用しましたが、次のエラーが発生します。
検出された循環依存関係の警告:src/app/dashboard/dashboard-child1/dashboard-child1.component.ts-> src/app/dashboard/dashboard.service.ts-> src/app/dashboard/dashboard.module.ts- > src/app/dashboard/dashboard-routing.module.ts-> src/app/dashboard/dashboard-child1/dashboard-child1.component.ts
検出された循環依存関係の警告:src/app/dashboard/dashboard-routing.module.ts-> src/app/dashboard/dashboard-child1/dashboard-child1.component.ts-> src/app/dashboard/dashboard.service ts-> src/app/dashboard/dashboard.module.ts-> src/app/dashboard/dashboard-routing.module.ts
検出された循環依存関係の警告:src/app/dashboard/dashboard.module.ts-> src/app/dashboard/dashboard-routing.module.ts-> src/app/dashboard/dashboard-child1/dashboard-child1.component ts-> src/app/dashboard/dashboard.service.ts-> src/app/dashboard/dashboard.module.ts
検出された循環依存関係の警告:src/app/dashboard/dashboard.service.ts-> src/app/dashboard/dashboard.module.ts-> src/app/dashboard/dashboard-routing.module.ts-> src/app /dashboard/dashboard-child1/dashboard-child1.component.ts-> src/app/dashboard/dashboard.service.ts
ここで何が欠けていますか?
これが発生する可能性が最も高いのは、
DashboardChild1は、DashboardModuleのメンバーであり、DashboardChild1は注入によってDashboardModuleにアクセスしようとしています。結果は循環依存です。
DashboardModule calls DashboardChild1
DashboardChild1 calls DashboardModule
DashboardModule class DashboardChild1
DashboardChild1 calls DashboardModule
...
...
...
...
同じことがDashboardServiceにも有効です。
DashboardModule calls DashboardChild1 calls DashboardService
DashboardService calls DashboardModule
DashboardModule calls DashboardChild1 calls DashboardService
DashboardService calls DashboardModule
...
...
...
...
このブログ投稿にあるとおり: https://medium.com/@tomastrajan/total-guide-to-angular-6-dependency-injection-providedin-vs-providers-85b7a347b59f
DashboardService
を独自のモジュールDashboardServiceModule
に引き出すことができます。次に、それをDashboardModule
にインポートし、DashboardChild(ren)
で使用します。