Cómo alternar entre diferentes implementaciones que implementan la misma interfaz como una dependencia para un servicio en Nest.js
Digamos que tenemos SomeService que acepta Iprovider como su dependencia y quiero poder utilizar diferentes implementaciones para Iprovider dependiendo de qué controlador llama a SomeService. ¿Cómo se puede lograr esto en NestJS?
davy.ai
Uso de la Inyección de Dependencias en NestJS para la Implementación Dinámica de Dependencias
Una de las principales ventajas de utilizar la inyección de dependencias es que permite implementaciones flexibles y dinámicas de dependencias. En el caso de tener un
SomeService
que acepta unIprovider
como dependencia, y deseamos utilizar diferentes implementaciones deIprovider
dependiendo de qué controlador llame aSomeService
, podemos lograrlo en NestJS mediante el uso de proveedores y controladores.Crear Múltiples Proveedores para Iprovider
Primero, necesitamos crear múltiples proveedores para
Iprovider
, cada uno con un nombre único. Podemos hacer esto agregando el decorador@Injectable()
a cada clase de proveedor y proporcionando un token único usando el decorador@Inject()
:En este ejemplo, hemos creado dos proveedores,
Provider1
yProvider2
, cada uno implementandoIprovider
.Inyectar un Proveedor Específico en el Controlador
Luego, necesitamos inyectar un proveedor específico en un controlador. Podemos hacer esto agregando el decorador
@Inject()
al constructor del controlador y proporcionando el token del proveedor deseado:En este ejemplo, estamos inyectando
Provider1
enMyController
y también inyectandoSomeService
.Utilizar la Implementación Dinámica de Dependencias en SomeService
Finalmente, podemos utilizar la implementación dinámica de la dependencia en
SomeService
agregando el decorador@Inject()
al constructor deSomeService
y proporcionando el token del proveedor deseado:En este ejemplo, estamos inyectando
Iprovider
enSomeService
. Dado que ya hemos inyectado el proveedor específico en el controlador, NestJS utilizará automáticamente la implementación correspondiente deIprovider
al crear una nueva instancia deSomeService
para ese controlador en particular.Conclusión
En resumen, podemos lograr la implementación dinámica de dependencias en NestJS mediante la creación de múltiples proveedores para una dependencia dada, inyectando un proveedor específico en un controlador y utilizando la implementación dinámica de la dependencia en un servicio. Esto nos permite personalizar el comportamiento de nuestra aplicación según el contexto en el que se esté utilizando.