Круговая зависимость обнаружена в Angular 7

В моем приложении Angular 7 есть следующая структура:

AppModule
DashboardModule
  DashboardChild1
  DashboardChild2
  DashboardChild3
  DashboardService
AdminModule
  AdminChild1
  AdminChild2
  AdminChild3

и я хочу, чтобы DashboardService был доступен только в 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

что мне здесь не хватает?


person Pritam Bohra    schedule 06.01.2019    source источник


Ответы (2)


Скорее всего, это произойдет, поскольку

DashboardChild1 является членом DashboardModule и DashboardChild1, пытаясь получить доступ к DashboardModule с помощью injectible. Результат - круговая зависимость.

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
...
...
...
...
person Derviş Kayımbaşıoğlu    schedule 06.01.2019
comment
как мне использовать эту службу в том же модуле, то есть в компоненте DashboardChild1 ?? - person Pritam Bohra; 07.01.2019
comment
Я считаю, что то, что вы пытаетесь сделать, является чем-то необычным. Как правило, мы не используем модули в сервисах. Я не уверен, что вы пытаетесь сделать. Я считаю, что вам нужно очистить свой разум, подумать о том, что вам нужно сделать, и задать новый вопрос по этому поводу. Я имею в виду, зачем вам вставлять DashboardModule в DashboardService. DashboardModule содержит определение вашего модуля - person Derviş Kayımbaşıoğlu; 07.01.2019
comment
Я пытаюсь практиковать то, что упомянуто по этой ссылке angular.io/guide/providers#providedin- and-ngmodules - person Pritam Bohra; 07.01.2019
comment
это совершенно другой сценарий, у вас может быть пользовательский модуль, но в нем нет компонентов, верно? это для регистрации провайдера. В вашем случае вы непреднамеренно делаете рекурсию. - person Derviş Kayımbaşıoğlu; 07.01.2019

Как видно из этого сообщения в блоге: https://medium.com/@tomastrajan/total-guide-to-angular-6-dependency-injection-providedin-vs-providers-85b7a347b59f

Вы можете вытащить DashboardService в отдельный модуль DashboardServiceModule. Затем импортируйте это в DashboardModule и используйте в своем DashboardChild(ren).

person kjbetz    schedule 16.09.2019