首页 > 解决方案 > 如何在 NestJS 中实现 OnApplicationShutdown 接口的类中使用 Service

问题描述

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

我试图在构造函数中注入服务,但它的值是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();

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

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

标签: typescriptdependency-injectionnestjs

解决方案


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


推荐阅读