如何使用NestJS创建充当单例的服务 [英] How to create a Service that acts as a singleton with NestJS
本文介绍了如何使用NestJS创建充当单例的服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试创建验证单例服务的模块。想象一下QueueService
,最简单的实现是单例服务。
可复制存储库:https://github.com/colthreepv/nestjs-singletons
代码墙
app.module e.ts:
@Module({ imports: [FirstConsumerModule, SecondConsumerModule] })
export class AppModule {}
firstconsumer.module e.ts和Second Consumer er.module e.ts(相同):
@Injectable()
class FirstConsumer {
constructor(private readonly dependency: DependencyService) {}
}
@Module({
imports: [DependencyServiceModule],
providers: [DependencyService, FirstConsumer]
})
export class FirstConsumerModule {
constructor(private readonly first: FirstConsumer) {}
}
Dependency.module e.ts:
@Injectable()
export class DependencyService {
constructor() { console.log("Instance created") }
}
@Module({ providers: [DependencyService], exports: [DependencyService] })
export class DependencyServiceModule {}
代码完成
我想要的是让console.logInstance created
只发布一次。
目前:
[NestFactory] Starting Nest application...
Instance created
Instance created
Instance created
[InstanceLoader] AppModule dependencies initialized +16ms
[InstanceLoader] DependencyServiceModule dependencies initialized +1ms
[InstanceLoader] FirstConsumerModule dependencies initialized +1ms
[InstanceLoader] SecondConsumerModule dependencies initialized +1ms
[NestApplication] Nest application successfully started +8ms
NestJS中的推荐答案
模块是单例的,只要它们是由同一模块提供的,它们的提供程序就是单例。在您的示例代码中,您的DependencyService
包含在三个不同模块的三个不同的providers
数组中。相反,应该做的是仅将其放在DependencyServiceModule
和exports
数组的providers
数组中。然后,您只需要在FrstConsumerModule
和SecondConsumerModule
和do not的imports
数组中包含DependencyServiceModule
,并将DependencyService
添加到其中任何一个的providers
数组中。由于位于exports
数组中,提供程序已可用于模块上下文。
@Module({
providers: [DependencyService],
exports: [DependencyService]
})
export class DependencyServiceModule {}
@Module({
imports: [DependencyServiceModule],
providers: [FirstConsumer] // notice no DependencyService class
})
export class FirstConsumerModule {}
@Module({
imports: [DependnecyServiceModule, FirstCosnumerModule]
})
export class AppModule {}
使用上述内容,您将只看到一个"实例已创建"日志,而不是两个。
这篇关于如何使用NestJS创建充当单例的服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文