Patrón de diseño donde las dependencias de un componente se pasan desde fuera en lugar de crearlas internamente.
Dependency Injection (DI) es un patrón de diseño donde las dependencias de una clase se proporcionan externamente en lugar de crearlas internamente. Esto facilita: - Testing: Inyectar mocks en lugar de dependencias reales - Desacoplamiento: Los componentes no conocen las implementaciones concretas - Flexibilidad: Cambiar implementaciones sin modificar código - Inversión de control (IoC): El framework maneja el ciclo de vida Frameworks como NestJS, Angular o Spring implementan DI de forma nativa.
// Sin DI (acoplado) class UserService { private db = new DatabaseConnection(); // Dependencia creada internamente } // Con DI (desacoplado) interface IDatabase { query(sql: string): Promise<any>; } class UserService { constructor(private db: IDatabase) {} // Dependencia inyectada async getUsers() { return this.db.query('SELECT * FROM users'); } } // En producción const realDb = new PostgresDatabase(); const userService = new UserService(realDb); // En tests const mockDb = { query: jest.fn().mockResolvedValue([]) }; const testService = new UserService(mockDb); // NestJS - DI automática con decoradores @Injectable() class UserService { constructor( @Inject('DATABASE') private db: IDatabase, private logger: LoggerService ) {} }