Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

666
Visualizações
¿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 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

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 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda