0

每次我在 inversify-express 服务器中调用 api 时,依赖项每次都会创建一个新对象

var kernel=new Kernel();
kernel.bind<interfaces.Controller>(TYPE.Controller).to(SyncController).whenTargetNamed(TAGS.SyncController);
kernel.bind<DB_SyncDataDAO>(TYPES.DB_SyncDataDAO).to(DB_SyncDataDAO_Impl);
kernel.bind<SyncService>(TYPES.SyncService).to(SyncService_Impl);

每当我调用 api 时,它每次都会创建每个依赖项的新对象

4

1 回答 1

0

我假设您希望对象图中的某些依赖项是单例的。您可以inSingletonScope在声明绑定时使用:

kernel.bind<interfaces.Controller>(TYPE.Controller)
      .to(SyncController)
      .whenTargetNamed(TAGS.SyncController)
      .inSingletonScope();

kernel.bind<DB_SyncDataDAO>(TYPES.DB_SyncDataDAO)
      .to(DB_SyncDataDAO_Impl)
      .inSingletonScope();

kernel.bind<SyncService>(TYPES.SyncService)
      .to(SyncService_Impl)
      .inSingletonScope();

作为旁注(与您的问题无关)如果DB_SyncDataDAO_Impl是实例(非类),那么您应该使用

kernel.bind<T>("T").toConstantValue(instanceOfT)

代替:

kernel.bind<T>("T").to(classWhichIsAnImplementationOfT)

使用时toConstantValueinSingletonScope不需要,因为默认情况下常量值表现为单例。

希望能帮助到你 :)

于 2016-10-12T10:50:23.527 回答