首页 > 解决方案 > 在 Nestjs 中,如果服务中未提及 Injectable 但服务在每个模块中注册为提供者,那么 DI 将如何工作

问题描述

如果我在模块中将服务声明为提供者但没有在服务中使用 @Injectable 装饰器,会发生什么?

//Module
module({
controller: [catController],
provider: [catService]
})

//Service
//@Injectable()
export class catService{
}

我认为令牌将被注册但不会被使用,并且每次都会共享新实例。我对么?

标签: dependenciesdecoratornestjscode-injectioninjectable

解决方案


@Injectable()是一个有趣的案例,因为它的作用是告诉 NestJS 这个类需要注入依赖项。从技术上讲,如果没有要注入的依赖项,则可以省略此装饰器,但有可能不再与框架的其余部分保持一致。否则,该类本身将充当任何其他 NestJS 提供程序,并且仍然可以注入其他控制器和提供程序。


推荐阅读