typescript - 我可以使用 Nestjs 注入(inject)接口(interface)而不是类吗?

标签 typescript dependency-injection nestjs

我想使用这样的东西:

cats.interface.ts

export interface ICats {
  meow(): void
}

cats.service.ts

@Injectable()
export class CatsService implements ICats {
  constructor()

  meow(): void {
    return;
  }
}

cats.module.ts

@Module({
  providers: [CatsService]
  exports: [CatsService]
})
export class CatsModule {}

animals.service.ts

@Injectable()
export class AnimalsService {
  constructor(@Inject('ICats') private readonly cats: ICats)

  test(): void {
    return this.cats.meow();
  }
}

animals.module.ts

@Module({
  imports: [CatsModule],
  providers: [AnimalsService],
  exports: [AnimalsService]

但是收到 Nest 无法解析

的依赖关系

最佳答案

您可以使用@Inject('ICats')但是您必须向 DI 容器注册该注入(inject) token 。为此,您可以使用 custom provider像这样:

@Module({
  providers: [
    {
      provide: 'ICats',
      useClass: CatsService
    }
  ],
  exports: ['ICats'],
})
export class CatsModule {}

接口(interface)本身是不够的,因为没有像类那样的关于它们的元数据。如果没有这些元数据,Nest 将不知道要注入(inject)什么,这就是为什么我们必须使用手动 @Inject()

关于typescript - 我可以使用 Nestjs 注入(inject)接口(interface)而不是类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72406470/

相关文章:

java - OSGi和依赖注入(inject)有什么关系

postgresql - 迁移文件中的 NestJS TypeORM 语法错误

unit-testing - 在 VS 中为 typescript 运行单元测试

typescript - 声明(定义)类成员方法

java - 在 Spring 运行时注册 bean(prototype)

java - Guice:无法注入(inject)辅助列表<Long>

node.js - 尚未为模型 "ResourceSchema"注册架构。 - 巢.js

node.js - 缓存服务方法的返回值

typescript - Chart.js ionic 2 Angular2 : Background color of bar graph not changing

reactjs - React Custom Hook with Typescript Type error "Property ' x' 在类型 'interface | (({ target }: any) => void)' .ts(2339) 上不存在"