Conteneurs DI avec InversifyJS
Enregistrer et résoudre des services avec un conteneur.
Conteneurs DI avec InversifyJS est une leçon TypeScript Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage TypeScript Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours TypeScript Academy comprend 4 leçons au total.
Pourquoi un conteneur DI ?
Câbler manuellement de grands graphes d’objets est fastidieux et sujet aux erreurs. Un conteneur DI enregistre la manière de construire chaque dépendance et les résout automatiquement. InversifyJS est un conteneur TypeScript populaire.
Installation et activation
InversifyJS s’appuie sur les décorateurs et les métadonnées de réflexion. Vous importez depuis inversify et activez experimentalDecorators ainsi que reflect-metadata.
import "reflect-metadata";
import { Container, injectable, inject } from "inversify";Marquer les classes @injectable
Le décorateur @injectable() indique au conteneur qu’une classe peut être construite et injectée. Chaque classe construite par le conteneur en a besoin.
import { injectable } from "inversify";
@injectable()
class ConsoleLogger {
log(m: string) { console.log(m); }
}Déclarer les dépendances avec @inject
Utilisez @inject(token) sur les paramètres du constructeur pour indiquer au conteneur quelle liaison fournir. Le jeton identifie la dépendance.
@injectable()
class OrderService {
constructor(@inject("Logger") private logger: ConsoleLogger) {}
place() { this.logger.log("placed"); }
}Créer un conteneur
Un Container contient toutes les liaisons de votre application. Vous en créez un au démarrage et y enregistrez les dépendances.
import { Container } from "inversify";
const container = new Container();Lier une interface à une implémentation
L’API fluide bind<T>(token).to(Impl) associe un jeton, souvent une interface, à une classe concrète que le conteneur instanciera.
interface Logger { log(m: string): void; }
container.bind<Logger>("Logger").to(ConsoleLogger);Résoudre les services
container.get<T>(token) construit le service demandé en construisant et en injectant récursivement ses dépendances à votre place.
container.bind<OrderService>(OrderService).toSelf();
const svc = container.get<OrderService>(OrderService);
svc.place();Remplacer les implémentations
Pour utiliser un autre outil de journalisation, reliez le jeton à une autre classe. Les consommateurs ne changent pas, car ils dépendent du jeton et non de la classe concrète.
@injectable()
class SilentLogger implements Logger { log() {} }
container.rebind<Logger>("Logger").to(SilentLogger);Portée à instance unique
Par défaut, chaque appel à get peut créer une nouvelle instance. Utilisez inSingletonScope() pour partager une seule instance dans toute l’application.
container.bind<Logger>("Logger").to(ConsoleLogger).inSingletonScope();Tester avec le conteneur
Dans les tests, vous pouvez créer un conteneur vierge et y lier des implémentations factices, afin de bénéficier du même câblage tout en isolant l’unité testée.
const testContainer = new Container();
testContainer.bind<Logger>("Logger").to(SilentLogger);Compromis liés aux conteneurs
Les conteneurs réduisent le code répétitif pour les grands graphes, mais ajoutent une dépendance, des décorateurs et une indirection. Pour les petites applications, l’injection manuelle par constructeur est souvent plus claire.
Vérification rapide
Vérification rapide de cette leçon.
Récapitulatif
InversifyJS utilise @injectable, @inject(token) et un Container. Vous utilisez bind<Interface>(token).to(Impl), puis container.get résout automatiquement le graphe. Cela nécessite reflect-metadata et des décorateurs, au prix d’un code répétitif réduit mais d’une plus grande indirection.
Apprends TypeScript avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 101
- Leçons
- 352
Questions Fréquemment Posées
La leçon « Conteneurs DI avec InversifyJS » est-elle gratuite ?
Oui — le texte complet de « Conteneurs DI avec InversifyJS » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours TypeScript Academy, passe à CoddyKit PRO. Le cours TypeScript Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Conteneurs DI avec InversifyJS » ?
Enregistrer et résoudre des services avec un conteneur. Tu pratiques TypeScript Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer TypeScript Academy ?
Aucune expérience préalable n'est requise. TypeScript Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Conteneurs DI avec InversifyJS » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon TypeScript Academy ?
Oui. Chaque leçon TypeScript Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Principes de l’inversion de contrôle
- Injection par constructeur
- Conteneurs DI avec InversifyJS
- Jetons de service sûrs du point de vue du typage