如何将实例绑定到反转容器

mat*_*ilk 4 javascript express typescript inversifyjs

我正在使用inversifyinversify-express-utils.

我有一个很平常的inversify/express设置。

  • 控制器
    • 服务
      • 一个模块
        • B模块

B module是一个如下所示的类:

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);
}
Run Code Online (Sandbox Code Playgroud)

现在,这里的问题是,正如您在构造函数中看到的,我有这行代码:

this.corrector.loadDictionary()
Run Code Online (Sandbox Code Playgroud)

该行需要一秒钟多的时间来执行。所以基本上看起来实际的实例创建是在我为服务提供服务@inject时发生的 所以每次我发出请求时,都会执行 的构造函数,因此请求需要超过 1000 毫秒而不是低于 100 毫秒。BASpellCorrectorFactory

如何将此类绑定到 inversify,以便在绑定期间实例化该类,并且在A module我可以访问在应用程序启动时创建的实例,而不是在我向快速路径发送请求时?

提前致谢!

mat*_*ilk 5

好的,以防万一有人查看此页面来寻找答案。

解决方案很简单:

container
  .bind<SpellCorrectorFactory>(TYPES.SpellCorrector)
  .to(SpellCorrectorFactory)
  .inSingletonScope();
Run Code Online (Sandbox Code Playgroud)

这会立即调用构造函数SpellCorrectorFactory并返回实例。因此,每当您注入此绑定的结果时,您都可以直接访问该实例及其函数。