javascript - 如何将实例绑定(bind)到反转容器

标签 javascript typescript express inversifyjs

我正在使用 inversifyinversify-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/

相关文章:

javascript - 如何使用 JavaScript/RegEx 将 2 个 RegEx 语句组合在一起?

javascript - 模拟所有视口(viewport)大小的恒定页面大小

javascript - 如何为每个选项添加索引作为值?

typescript - 如何使用 Nestjs 和 apollo 服务器拼接多个远程模式

angular - 类型 'BehaviorSubject<false>' 不可分配给类型 'BehaviorSubject<boolean>'

javascript - 在异步回调中捕获尝试错误

node.js - 将 angular.js $resource 与 Express 框架一起使用

javascript - 访问数组值返回 'undefined' ,但我可以使用 console.dir() 查看这些值?

javascript - 隐式导入的 TypeScript 2.1 功能不起作用

javascript - 如何在 React 中使用 fetch 方法上传文件?