J'essaie de fournir un service de résolution via le nouvel outil providedIn
attribut.
Il s'agit d'un résolveur de traductions que j'utilise dans un module protégé :
import { Injectable } from '@angular/core';
import { Observable , pipe } from 'rxjs';
import {map} from "rxjs/operators";
//This is causing: "WARNING in Circular dependency detected:"
import {ProtectedModule} from "../../../protected/protected.module";
import { HttpHandlerService } from '../../http/http-handler.service';
@Injectable({
providedIn: ProtectedModule //Over here (I need the import for this line)
})
export class TranslationsResolverService {
constructor(private _httpHandlerService : HttpHandlerService) { }
resolve(): any {
//Do Something...
}
}
J'ai déclaré le service translations resolver dans le module protected routing :
import { NgModule } from '@angular/core';
import {RouterModule, Routes} from '@angular/router';
import {AuthGuard} from "../core/resolvers/auth/auth.guard";
import {TranslationsResolverService} from "./../core/resolvers/translations/translations-resolver.service";
const routes: Routes = [
{
path : 'app' ,
component: ProtectedComponent,
resolve : {
translations : TranslationsResolverService // <---- Over here - i can't remove that of course
},
canActivate: [AuthGuard],
]
}
];
@NgModule({
imports : [RouterModule.forChild(routes)],
exports : [RouterModule]
})
export class ProtectedRoutingModule { }
En raison du fait que j'importe (import de typescript) le fichier protected.module
dans le translations-resolver.service.ts
afin de l'utiliser dans le providedIn
attribut Je reçois un WARNING dans Dépendance circulaire détectée :
path/to/translations-resolver.service.ts ->
protected/protected.module.ts ->
protected/protected-routing.module.ts ->
path to translations-resolver.service.ts
Le 2e chemin (protected/protected.module.ts) est ajouté en raison de l'utilisation de l'option providedIn
attribut.
Je peux résoudre ce problème en fournissant simplement le translationsResolver
en tant que NgModule provider
(dans le tableau des fournisseurs) mais je préfère que ce soit un injectable
fournisseur.
Des suggestions pour résoudre ce problème ?
0 votes
Vous devez toujours fournir votre service dans l'injecteur Root, sauf si vous souhaitez que le service ne soit disponible que si le consommateur importe un @NgModule particulier. Référez-vous : angular.io/guide/providers#provider-scope
0 votes
À partir d'Angular 10, vous pouvez également déclarer des fournisseurs dans des composants dont la portée est limitée à la hiérarchie de ce composant.
0 votes
En Angular 9+ vous pouvez utiliser providerIn : any, vérifiez ma réponse