You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Loopback 4(TypeScript)中如何实例化带依赖注入的类并调用方法

Loopback 4 调用带依赖注入类方法的解决方案

核心逻辑

Loopback 4 基于IoC容器实现依赖注入,所有带@injectable、@controller、@service、@repository等装饰器的类,依赖都会由容器自动注入,不需要手动实例化传参。

常用实现方案

  • 方案1:从应用容器直接获取实例(通用)
    如果可以拿到Loopback应用实例对象(比如应用启动脚本、自定义逻辑中),直接通过get方法从容器获取已经完成依赖注入的实例即可:
// app为你初始化的Loopback应用实例
const cronController = await app.get<CronController>('controllers.CronController');
// 直接调用目标方法
await cronController.cron();

如果需要直接调用Service的方法也可以直接获取Service实例:

const syncService = await app.get<SyncService>('services.SyncService');
await syncService.pitSyncCompanies();
  • 方案2:通过生命周期观察者注册定时任务(最适配Cron场景)
    你当前的需求是定时触发Cron任务,更推荐用Loopback4的生命周期钩子实现,容器会自动处理所有依赖:
  1. 定义生命周期观察者类
import { LifeCycleObserver, lifeCycleObserver, CoreBindings, inject, Application } from '@loopback/core';
import { CronController } from './cron.controller';
// 引入你用的定时任务库,比如node-cron
import * as cron from 'node-cron';

@lifeCycleObserver('server')
export class CronJobObserver implements LifeCycleObserver {
  constructor(
    @inject(CoreBindings.APPLICATION_INSTANCE) private app: Application,
  ) {}

  // 应用启动完成后自动执行该方法
  async start() {
    const cronController = await this.app.get<CronController>('controllers.CronController');
    // 配置定时规则触发cron方法,示例为每分钟执行一次
    cron.schedule('* * * * *', () => {
      cronController.cron();
    });
  }
}
  1. 在你的application.ts中注册该观察者
this.lifeCycleObserver(CronJobObserver);
  • 方案3:手动实例化(不推荐)
    如果特殊场景必须手动new实例,需要手动补齐所有嵌套依赖:
// 先实例化Repository,需要传入它的依赖比如数据源
const companyRepository = new CompanyRepository(/* 传入Repository所需参数 */);
// 实例化Service,传入Repository
const syncService = new SyncService(companyRepository);
// 实例化Controller,传入Service
const cronController = new CronController(syncService);
// 调用方法
await cronController.cron();

该方式需要自己维护完整依赖链,依赖层级多的时候维护成本极高,非特殊情况不建议使用。

内容的提问来源于stack exchange,提问作者user2869736

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:27:04