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
相关产品推荐
相关产品推荐

