#node.js #typescript #inversifyjs
#node.js #typescript #inversifyjs
Вопрос:
Каждый раз, когда я вызываю api на сервере inversify-express, зависимость каждый раз создает новый объект
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, он каждый раз создает новый объект каждой зависимости
Комментарии:
1. И ваш вопрос?
2. Вы решили эту проблему? Можете ли вы опубликовать ответ или пометить один из приведенных ниже ответов как действительный?
Ответ №1:
Я предполагаю, что вы хотите, чтобы некоторые зависимости в вашем графе объектов были одиночными. Вы можете сделать это, используя 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
это экземпляр (класс nota), тогда вам следует использовать
kernel.bind<T>("T").toConstantValue(instanceOfT)
Вместо:
kernel.bind<T>("T").to(classWhichIsAnImplementationOfT)
При использовании toConstantValue
, inSingletonScope
не требуется, поскольку постоянные значения по умолчанию ведут себя как одиночные.
Надеюсь, это поможет 🙂