Así que tengo un proyecto NestJS con CustomConfigService que extiende @nestjs/config y anula algunos de sus métodos para tratar con variables de entorno y tengo myApp.config.ts que contiene una docena de constantes exportadas que devuelven bloques de configuración , como esto:
export const deviConfig = () => { return { secret: config.get('SECRET_KEY'), auth: config.get('AUTH_OPTION'), steps: config.get('STEPS_OPTIONS'), active: config.get('ENABLE_DEVI'), }; }; Ese config.get proviene de mi clase personalizada con el .get() sobrescrito de ConfigService .
Lo principal aquí es: si voy a usar mi CustomConfigService en mi main , mi app.module y tal vez en algunos otros proveedores, ¿debería usar la inyección de dependencia?
Si estuviera a punto de usar los métodos reales de ConfigService , supongo que debería, ya que así es como nos dicen los documentos de NestJS, pero dado que es una clase personalizada que anula el ConfigService real, ¿debería hacerlo?
La forma en que lo estoy haciendo actualmente es:
main.ts: const configService = app.get(CustomConfigService);
configService.get('VAR') // este es mi método personalizado
app.module.ts: const configService = new(CustomConfigService);
configService.get('VAR') // también mi método personalizado
Además... No estoy realmente seguro de cuándo debo usar DI y cuándo está bien usar simplemente el nuevo (MyService), ¿podría ilustrarme?
Creo que siempre debe usar DI cuando se encuentre dentro del contexto de la aplicación NestJS, es decir, dentro de cualquier módulo/servicio/controlador o resolución.
para .module, normalmente, al importar un módulo, hay una forma de inyectar ConfigService para usar dentro de forRootAsync. Por ejemplo, el siguiente código obtenido de la documentación de nestjs
MongooseModule.forRootAsync({ imports: [ConfigModule], useFactory: async (configService: ConfigService) => ({ uri: configService.get<string>('MONGODB_URI'), }), inject: [ConfigService], });el único momento en que no hay forma de hacer DI es cuando está fuera del contexto de NestJS en main.ts, entonces necesita obtener el ConfigService de la aplicación iniciada (como el ejemplo que ha mostrado para main.ts)