Contenedores de DI con InversifyJS
Registre y resuelva servicios con un contenedor.
Contenedores de DI con InversifyJS es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de TypeScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de TypeScript Academy incluye 4 lecciones en total.
¿Por qué usar un contenedor de DI?
Conectar manualmente grafos de objetos grandes es tedioso y propenso a errores. Un contenedor de DI registra cómo crear cada dependencia y las resuelve automáticamente. InversifyJS es un contenedor popular para TypeScript.
Instalación y activación
InversifyJS depende de decoradores y metadatos de reflexión. Importe desde inversify y active experimentalDecorators, además de reflect-metadata.
import "reflect-metadata";
import { Container, injectable, inject } from "inversify";Marcar clases con @injectable
El decorador @injectable() indica al contenedor que una clase se puede construir e inyectar. Todas las clases que construya el contenedor lo necesitan.
import { injectable } from "inversify";
@injectable()
class ConsoleLogger {
log(m: string) { console.log(m); }
}Declarar dependencias con @inject
Utilice @inject(token) en los parámetros del constructor para indicar al contenedor qué enlace debe proporcionar. El token identifica la dependencia.
@injectable()
class OrderService {
constructor(@inject("Logger") private logger: ConsoleLogger) {}
place() { this.logger.log("placed"); }
}Crear un contenedor
Un Container contiene todos los enlaces de la aplicación. Se crea uno al iniciar la aplicación y se registran las dependencias en él.
import { Container } from "inversify";
const container = new Container();Enlazar una interfaz con una implementación
La API fluida bind<T>(token).to(Impl) asigna un token (a menudo una interfaz) a una clase concreta que el contenedor instanciará.
interface Logger { log(m: string): void; }
container.bind<Logger>("Logger").to(ConsoleLogger);Resolver servicios
container.get<T>(token) construye el servicio solicitado y crea e inyecta recursivamente sus dependencias.
container.bind<OrderService>(OrderService).toSelf();
const svc = container.get<OrderService>(OrderService);
svc.place();Sustituir implementaciones
Para utilizar un registrador diferente, vuelva a enlazar el token con otra clase. Los consumidores no se modifican porque dependen del token, no de la clase concreta.
@injectable()
class SilentLogger implements Logger { log() {} }
container.rebind<Logger>("Logger").to(SilentLogger);Ámbito singleton
De forma predeterminada, cada get puede crear una instancia nueva. Utilice inSingletonScope() para compartir una única instancia en toda la aplicación.
container.bind<Logger>("Logger").to(ConsoleLogger).inSingletonScope();Probar con el contenedor
En las pruebas puede crear un contenedor nuevo y enlazar objetos simulados, con las mismas ventajas de conexión y aislando la unidad que se está probando.
const testContainer = new Container();
testContainer.bind<Logger>("Logger").to(SilentLogger);Compromisos de los contenedores
Los contenedores reducen el código repetitivo en grafos grandes, pero añaden una dependencia, decoradores e indirección. En aplicaciones pequeñas, la inyección manual mediante el constructor suele ser más clara.
Comprobación rápida
Comprobación rápida de esta lección.
Resumen
InversifyJS usa @injectable, @inject(token) y un Container. Se hace bind<Interface>(token).to(Impl) y container.get resuelve el grafo automáticamente. Requiere reflect-metadata y decoradores, a cambio de reducir el código repetitivo mediante indirección.
Preguntas frecuentes
¿La lección «Contenedores de DI con InversifyJS» es gratis?
Sí — el texto completo de «Contenedores de DI con InversifyJS» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de TypeScript Academy, actualiza a CoddyKit PRO. El curso de TypeScript Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Contenedores de DI con InversifyJS»?
Registre y resuelva servicios con un contenedor. Practicas TypeScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar TypeScript Academy?
No se requiere experiencia previa. TypeScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Contenedores de DI con InversifyJS»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de TypeScript Academy?
Sí. Cada lección de TypeScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Conceptos básicos de inversión de control
- Inyección mediante constructor
- Contenedores de DI con InversifyJS
- Tokens de servicio seguros