我正在使用 inversify
和 inversify-express-utils
。
我有一个非常普通的inversify/express
设置。
- Controller
- 服务
- 一个模块
- B模块
- 一个模块
- 服务
B 模块
是一个如下所示的类:
import { injectable } from 'inversify';
import SpellCorrector from 'spelling-corrector';
@injectable()
export class SpellCorrectorFactory {
private corrector: any;
constructor() {
this.corrector = new SpellCorrector();
this.corrector.loadDictionary();
}
public correct = (text: string): string => this.corrector.correct(text);
}
现在,这里的问题是,正如您在构造函数中看到的那样,我有这行代码:
this.corrector.loadDictionary()
这行需要一秒钟的时间来执行。
所以基本上当我 @inject
service B
to service A
时,实际的实例创建似乎正在发生
所以每次我发出请求时,SpellCorrectorFactory
的构造函数都会被执行,所以请求需要超过 1000 毫秒而不是低于 100 毫秒。
我如何绑定(bind)这个类来反转,以便在绑定(bind)期间类被实例化并且在 A module
中我可以访问在应用程序启动时创建的实例,而不是在我发送时对快速路径的请求?
提前致谢!
最佳答案
好的,以防万一有人查看此页面以寻找答案。
解决方案很简单:
container
.bind<SpellCorrectorFactory>(TYPES.SpellCorrector)
.to(SpellCorrectorFactory)
.inSingletonScope();
这会立即调用 SpellCorrectorFactory
的构造函数并返回实例。
因此,无论何时注入(inject)此绑定(bind)的结果,您都可以直接访问实例及其函数。
关于javascript - 如何将实例绑定(bind)到反转容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63292761/