싱글 톤 서비스를 제공하는 모듈을 만들려고합니다. QueueService
가장 간단한 구현이 싱글 톤 서비스라고 상상해보십시오 .
재현 가능한 저장소 : https://github.com/colthreepv/nestjs-singletons
코드의 벽
app.module.ts :
@Module({ imports: [FirstConsumerModule, SecondConsumerModule] })
export class AppModule {}
firstconsumer.module.ts 및 secondconsumer.module.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.ts :
@Injectable()
export class DependencyService {
constructor() { console.log("Instance created") }
}
@Module({ providers: [DependencyService], exports: [DependencyService] })
export class DependencyServiceModule {}
코드 완료
내가 얻고 싶은 것은 console.log Instance 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
배열 이 있습니다 . 대신해야 할 일은 및 배열의 배열 에만 있는 것입니다 . 그럼 당신 만이 필요 에서 의 배열 과 와 하지 않는 를 추가 받는 하나의 배열입니다. 의 존재 덕분에 배열 공급자 이미 모듈 컨텍스트 가능하다.providers
DependencyServiceModule
exports
DependencyServiceModule
imports
FrstConsumerModule
SecondConsumerModule
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 {}
위의 경우 "인스턴스 생성됨"로그가 두 개가 아닌 하나만 표시됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다