typescript - Nestjs 和控制器中的服务继承
问题描述
我正在尝试为用户模块编写一些通用代码,这将很容易扩展。我遇到了依赖问题。我有 UserService、用户实体、ExtendedUserService 和 ExtendedUserModule 和 ExtendedUserController。
我想定义 ExtendedUserController 将接收扩展 typeof UserService 的服务(因为我希望这个控制器在模块中使用,并且在保存时我想使用任何相关服务保存更多信息)。
export class EmailUserController {
constructor(
private readonly emailService: UserService
) {
如果我这样做,我在发送 ExtendedUserService 时会遇到依赖问题,即使它扩展了 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]
})
任何想法?谢谢!
解决方案
NestJS 所做的是尝试解决依赖关系,是获取提供确切类的东西——而不是满足相同接口的东西,如果它考虑到扩展就会出现这种情况。这将特别令人困惑,因为这可能适用于多个类。
对此的标准解决方案是使用自定义类提供程序(参见此处)。
您可以像这样更新模块:
providers: [
EmailUserService,
{
provide: UserService,
useClass: EmailUserService, // Extends UserService
},
{
provide: 'CONFIG_OPTIONS',
useValue: options,
},
],
推荐阅读
- xml - 删除xml中的重复元素
- javascript - Vue中基于多个值的条件渲染
- php - skip first value for variable inside of foreach loop php
- node.js - Heroku Node.js Discord.js bot deployment failed
- javascript - 是否可以在 JavaScript(Jquery)的 setInterval 中获取当前时间加上 3 秒?
- excel - Excel 公式帮助 - 查找一行文本值的模式,但排除“?”
- ios - Convert NSAttributedString to HTML String
- r - Function to extract elements from a list column into a new column using purrr:::map
- django - docker tmpfs seems to have no effect on postgresql
- dynamics-crm - Creating on demand workflow directly in Production instance