es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo llamar a un método de una clase que tiene inyección de dependencia en Loopback 4 (typescript)?

export class CronController {
constructor(
@service() public syncService: SyncService,
) { }

async cron() {
    this.syncService.pitSyncCompanies();
}

}

@injectable({scope: BindingScope.TRANSIENT})
export class SyncService {
constructor(
@repository(CompanyRepository) public companyRepository: CompanyRepository,
) { }

    async pitSyncCompanies() {
        console.log('Hola');
    }
}

¿Cómo instancio CronController para llamar a su método cron()?
No puedo simplemente crear un objeto = new CronController() ya que su constructor acepta argumentos y no estoy seguro de qué pasar aquí.
¿Cómo llamar a un método de una clase que tiene inyección de dependencias en Loopback 4 (typescript)?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para instanciar la clase CronController y llamar al método cron(), puedes utilizar el siguiente código:

    import {SyncService} from './sync.service'; 
    import {CronController} from './cron.controller';
    
    const syncService = new SyncService(); // Instanciar SyncService
    const cronController = new CronController(syncService); // Instanciar CronController con SyncService como argumento
    cronController.cron(); // Llamar al método cron()
    

    Este código primero instancia la clase SyncService, que es una dependencia de la clase CronController. Luego, instancia la clase CronController, pasando la instancia de SyncService como argumento al constructor. Finalmente, llama al método cron() en la instancia de CronController, lo que a su vez llama al método pitSyncCompanies() de la instancia de SyncService.

    En Loopback 4, puedes utilizar el decorador @inject para inyectar dependencias en una clase. Por ejemplo, en lugar de pasar la instancia de SyncService como argumento al constructor de CronController, puedes anotar el parámetro del constructor con el decorador @inject:

    import {SyncService} from './sync.service';
    import {CronController} from './cron.controller';
    import {inject} from '@loopback/context';
    
    const syncService = new SyncService(); // Instanciar SyncService
    const cronController = new CronController(@inject('services.SyncService') syncService); // Instanciar CronController con SyncService inyectado
    cronController.cron(); // Llamar al método cron()
    

    En este código actualizado, el parámetro del constructor de CronController está anotado con el decorador @inject, que le indica a Loopback 4 que inyecte la instancia de SyncService. También necesitarías registrar la clase SyncService en el contexto de la aplicación de Loopback 4 para que pueda ser inyectada.

Comments are closed.