根据我的理解,现在nestjs在应用程序启动时创建了所有服务,也许我使用它是错误的是有没有办法配置NestJs根据请求创建服务?就像每次请求完成一样,会重新创建一些在该请求上使用的服务?
随着nest.js 6.0的发布,添加了injection scopes。有了这个,您可以为您的提供商选择以下三个范围之一:
将它添加到@Injectable()
装饰器:
@Injectable({ scope: Scope.REQUEST })
export class UsersService {}
或者在模块定义中为自定义提供程序设置它:
{
provide: 'CACHE_MANAGER',
useClass: CacheManager,
scope: Scope.TRANSIENT,
}
这将在nest.js 6.0中实现,请参阅此pull request。
正如卡米尔在这个issue写道:
一旦async-hooks功能(它在节点10中仍然是实验性的)是稳定的,我们将考虑为请求范围的实例提供内置解决方案。
所以现在,这似乎还不可能。您只能将整个模块标记为SingleScope
与默认的单例行为。使用SingleScope
,将为每个导入创建一个新的模块实例。
我想使用di能够将整个端点标记为在事务中运行,而无需为端点编写某些特定代码。而不是使用di有一个软件包可以帮助我们基于一个名为
cls-hooked
的回调链创建资源,该回调链基于Kim Kern在他的响应中写的内容,async-hooks
使用这个我能够在调用一个enpoint时启动一个事务并停止一旦完成了这一点,因为我使用typeorm
作为db orm我能够使用this solution