如何在 NestJS 中实现 OnApplicationShutdown 接口的 class 中使用服务

How to use Service in a class that implements OnApplicationShutdown interface in NestJS

我尝试使用的服务来自外部库,该库本身定义了一个全局字段,我在不同的模块中使用它。

我试图在构造函数中注入服务,但调用时其值为 undefined

shutdown.hook.ts的内容:

export class AppShutdownHook implements OnApplicationShutdown {
    constructor(
        private fooService: FooService
    ) {}

    async onApplicationShutdown(signal: string) {
        if (signal === "SIGTERM") {
            this.fooService.getFooField();
        }
    }
}

main.ts的内容:

app.enableShutdownHooks();

此外,我尝试将服务初始化为 class 属性,但它创建了另一个服务实例 class,它具有不同的全局值。

export class AppShutdownHook implements OnApplicationShutdown {
    private fooService = new FooService();
    ...
}

您需要用 @Injectable() 修饰 AppShutdownHook 以便 Nest 可以读取构造函数的元数据并正确执行您期望的依赖注入。