Conventions d’injection de dépendances (backend NestJS)
Dernière mise à jour : 2026-02-27
Référence détaillée : AGENTS_BACKEND.md (documentation interne) (structure des modules, Core Modules, interfaces).
Principes
- Services :
@Injectable()et enregistrement dans leprovidersdu module. - Contrôleurs : déclarés dans
controllersdu module ; injection des services via le constructeur. - Tokens d’interface : pour éviter les dépendances circulaires, utiliser un token symbolique + interface (voir Core Modules ci‑dessous).
- Logger : injecter via
@Inject('LoggerService')et utiliserinitializeLogger(logger, ClassName.name)pour un logger typé.
Modules
- Un module NestJS = un répertoire
src/<domaine>/avec<domaine>.module.ts, contrôleurs, services, DTO. - Les modules “métier” sont agrégés dans
ApiDomainModule(ou équivalent) et importés dansAppModule. - Ne jamais utiliser
forwardRef(): en cas de cycle, extraire un Core Module.
Core Modules (dépendances circulaires)
- Créer une interface et un token dans
<domaine>.interface.ts. - Créer un Core Module (
<domaine>-core.module.ts) qui ne dépend que de l’infra (Db, Config, Logger) et qui exporte le service via{ provide: TOKEN, useClass: MyService }. - Le module “complet” importe le Core Module et les autres modules métier.
- Dans les consommateurs, injecter avec
@Inject(TOKEN).
Exemples existants : StorageCoreModule, SearchCoreModule, AgentCoreModule, etc. Détails dans AGENTS_BACKEND.md (documentation interne).
Tests
- Les tests unitaires mockent les dépendances (services, repo) et n’utilisent pas le conteneur Nest.
- Pour les helpers (ex.
ActionHelpers,EntitySearchHelper), instancier la classe avec des mocks (logger, searchService) dans les specs.