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

Typescript InversifyJS:如何在main.ts设变量并从控制器获取值

在InversifyJS中从控制器获取共享变量值

嘿,恭喜你已经搭好基础的共享服务啦!要在控制器里拿到这个变量值,核心就是用Inversify的依赖注入机制,把你写的SetGetService注入到控制器里就行,咱们一步步来:

1. 确保服务以单例模式注册到容器

首先在main.ts里,得把SetGetService注册为单例——这步特别关键,只有单例才能保证整个应用里只有一个服务实例,你设置的变量才会全局共享。

import { Container } from 'inversify';
import { SetGetService } from './service';

// 创建Inversify容器
const container = new Container();

// 绑定服务为单例模式
container.bind<SetGetService>(SetGetService).toSelf().inSingletonScope();

// 初始化设置变量值
const sharedService = container.get(SetGetService);
sharedService.set({ id: 1, name: 'your-client-instance' }); // 传入你的client对象

2. 在控制器中注入服务并获取值

接下来,你的控制器需要标记为@injectable(),然后通过构造函数注入SetGetService,之后就能调用get()方法拿到变量了:

import { injectable, inject } from 'inversify';
import { SetGetService } from './service';

@injectable() // 必须加这个装饰器,Inversify才能识别该类可注入
export class YourController {
  // 通过构造函数注入共享服务
  constructor(
    @inject(SetGetService) private readonly setGetService: SetGetService
  ) {}

  // 示例方法:获取共享的client变量
  public getSharedClient() {
    const client = this.setGetService.get();
    // 这里可以根据业务逻辑处理client值
    return client;
  }
}

3. 注册控制器到容器

最后别忘了把控制器也注册到容器里,这样Inversify才能自动解析它的依赖:

// 在main.ts的容器配置中添加控制器注册
import { YourController } from './controllers/your-controller';

container.bind<YourController>(YourController).toSelf();

关键注意点

  • 必须用inSingletonScope():如果不指定作用域,Inversify默认会每次创建新的服务实例,这样你设置的值就无法跨文件共享了。
  • 所有需要注入的类(服务、控制器)都必须加上@injectable()装饰器,否则Inversify无法完成依赖注入。

这样操作后,你在控制器里调用getSharedClient()就能拿到main.ts里设置的client值啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:28:15