Typescript Nestjs和控制器中的服务继承

Typescript Nestjs和控制器中的服务继承,typescript,nestjs,Typescript,Nestjs,我正在尝试为用户模块编写一些通用代码,这将很容易扩展。 我在依赖性方面有问题。我有UserService、User entity、ExtendeDeduserService和ExtendedUserModule以及ExtendedUserController 我想定义ExtendeDeduserController将接收一个扩展typeof UserService的服务(因为我想在模块中使用此控制器,保存时我想使用任何相关服务保存更多信息) 如果我这样做,当我发送ExtendeDederUser

我正在尝试为用户模块编写一些通用代码,这将很容易扩展。 我在依赖性方面有问题。我有UserService、User entity、ExtendeDeduserService和ExtendedUserModule以及ExtendedUserController

我想定义ExtendeDeduserController将接收一个扩展typeof UserService的服务(因为我想在模块中使用此控制器,保存时我想使用任何相关服务保存更多信息)

如果我这样做,当我发送ExtendeDederUserService时,我会遇到依赖性问题,即使它扩展了UserService

Nest无法解析EmailUserController(?)的依赖项。请确保索引[0]处的参数UserService在EmailUserModule上下文中可用

模块看起来是这样的:

@Module({
    imports: [
        RoleModule,
        TypeOrmModule.forFeature([EmailUser]),
        JwtModule.register({
            secret: jwtConstants.secret,
            signOptions: { expiresIn: '100min' },
        })
    ],
    providers: [
        EmailUserService, // Extends UserService
        {
            provide: 'CONFIG_OPTIONS',
            useValue: options,
        },
    ],
    exports: [EmailUserService],
    controllers: [EmailUserController]
})
有什么想法吗?
谢谢

确保在
EmailUserModule

请确保将
UserService
放在
UserModule

中的
providers
部分,NestJS所做的是尝试解决依赖关系,是获得提供确切类的内容,而不是满足相同接口的内容,如果考虑扩展,情况就是这样。这将特别令人困惑,因为这可能适用于多个类

标准解决方案是使用自定义类提供程序(请参阅)

您可以如下方式更新模块:

  providers: [
    EmailUserService,
    {
      provide: UserService,
      useClass: EmailUserService, // Extends UserService
    },
    {
      provide: 'CONFIG_OPTIONS',
      useValue: options,
    },
  ],

你能展示一下你是如何发送ExtendeDeserService的吗?@Porcellus我编辑了这个问题,检查一下:)但我想使用EmailUserService,而不是UserService。如果我导入UserService,它将被使用,不是吗?谢谢!工作起来很有魅力:)小编辑-仍然需要提供
EmailUserService
,这样nest将加载其依赖项
提供程序:[EmailUserService,{provide:'UserService',useClass:EmailUserService,//Extends UserService},{提供:'CONFIG_OPTIONS',useValue:OPTIONS,}]
  providers: [
    EmailUserService,
    {
      provide: UserService,
      useClass: EmailUserService, // Extends UserService
    },
    {
      provide: 'CONFIG_OPTIONS',
      useValue: options,
    },
  ],