Я пытаюсь использовать ActivatedRoute в сервисе области приложения, но получаю ошибку циклической зависимости. Я не понимаю и не знаю, как устранить неполадки.
В моем приложении есть служба для получения Сообщества из параметра маршрута верхнего уровня.
Этот сервис используется в моем приложении в нескольких компонентах и других сервисах.
Когда я вставляю ActivatedRoute в свой конструктор, я получаю
Error: Provider parse errors:
Cannot instantiate cyclic dependency! Router ("[ERROR ->]"): in NgModule AppModule in ./AppModule@-1:-1
Когда я вместо этого вставляю Injector iteslf, а затем получаю ActivatedRoute в конструкторе, я получаю ошибку рекурсии.
Когда я получаю ActivatedRoute чуть позже в методе, он работает как положено.
@Injectable()
export class CommunityService {
constructor(
private injector: Injector
// private router: ActivatedRoute => Cyclic dependency
) {
// const router = this.injector.get(ActivatedRoute); => InternalError: "too much recursion"
}
public getCommunity(): Community {
const router = this.injector.get(ActivatedRoute); // this should not be needed
const communityCode = router.snapshot.paramMap.get('community');
return getCommunityByCode(communityCode);
}
}
Подобные вопросы уже есть, но они касаются HttpInterceptors. Это регулярный сервис.
При создании Stackblitz для @ Alex Я понял, что мы предоставили услугу сообщества во время APP_INITIALIZER. Это был недостающий кусок.
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { ContentService } from '@common/services/content.service';
export function loadContent(content: ContentService) {
return () => content.load();
}
@NgModule({
imports: [ BrowserModule ],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ],
providers: [ { provide: APP_INITIALIZER, useFactory: loadContent, deps: [ContentService], multi: true }],
})
export class AppModule { }