• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

595
Vistas
¿Cómo pasar argumentos de constructor a un proveedor de NestJS?

Tengo un servicio, que requiere un objeto de configuración literal en su constructor, algo como esto:

 @Injectable() export class BatteriesService { constructor(private config: Config) { }//The provider needs a config object }

Si simplemente agrego esta clase en la matriz de proveedores del módulo, obviamente obtengo un error, ya que falta un argumento de constructor.

Entonces, en lugar de solo hacer referencia a la clase BatteriesService, de alguna manera necesito crear una instancia. Intenté esto:

 @Module({ controllers: [BatteriesController], providers: [{ useFactory: ()=>{ return new BatteriesService({'someProp': 'someValue'}) }, provide:'BatteriesService' }] })

Y esto:

 @Module({ controllers: [BatteriesController], providers: [{ useValue:new BatteriesService({'someProp': 'someValue'}), provide:'BatteriesService' }] })

En ambos casos me sale el siguiente error:

Error: Nest no puede resolver las dependencias de BatteriesController (?). Asegúrese de que el argumento BatteriesService en el índice [0] esté disponible en el contexto BatteriesModule.

¿Cómo se puede hacer esto, sin "recurrir" a eludir el sistema DI o crear otro proveedor "interno" (config)?

about 3 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Cuando necesite tener DI en servicio, eso debe definirse en el módulo.

En tu caso

 @Injectable() export class BatteriesService { constructor(private config: ConfigService) { } } @Module({ imports: [ConfigModule.forRoot({})], // Configure it as needed providers: [BatteriesService] })

Su error es que en realidad no importa ConfigModule mientras su servicio depende de él.

Si desea utilizar el método useFactory , se vería así

 @Module({ providers: [{ useFactory: (config: ConfigService) => { return new BatteriesService(config); }, provide: BatteriesService, inject: [ConfigService] }] })

Supuse que su Config es en realidad Nest ConfigModule .

Pero si se trata de un módulo personalizado, aún debe importarlo como en los ejemplos anteriores.

Si desea pasar un objeto literal como configuración, intente esto

 interface MyConfigType = { something: string; } @Injectable() export class BatteriesService { constructor(@Inject('CONFIG') private config: MyConfigType) { } } @Module({ providers: [{ provide: 'CONFIG', useValue: { something: 'my-value' } }] })
about 3 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda