mongoose 如何用NestJs在抽象类中注入依赖?

m3eecexj  于 2023-08-06  发布在  Go
关注(0)|答案(1)|浏览(92)

假设我有一个抽象的服务,比如Bellow

abstract class AbstractService {
  @InjectConnection() connection: Connection
}

字符串
UserService将扩展AbstractService

class UserService extends AbstractService {
  async get () {
    this.connection //undefined
  }
}


当我扩展AbstractService时,我无法访问连接,但它可以使用单个类

class UserService {
  @InjectConnection() connection: Connection
  async get () {
    this.connection //mongoose connection
  }
}


然后调用UserService#get进入控制器

@Controller(ROUTER.USER)
export class UserController{
  constructor(private readonly service: UserService) { }
  @Get()
  get() {
    return this.service.get
  }
}

hmae6n7t

hmae6n7t1#

UserService扩展AbstractService时,它将扩展它的所有成员,如方法或构造函数,但它不会扩展connection,因为它是一个必须注入的装饰器,这就是为什么在第一个例子中this.connectionundefined,所以你必须处理它。
在第二个例子中,UserService没有扩展任何东西,它有自己的connection,所以它可以工作,这是显而易见的,但我们需要扩展AbstractService,以便我们可以使用它的方法。
一种解决方案是让UserService拥有自己的connection,并且一旦创建,就调用父类构造函数,并将connection传递给它。
在这种情况下,get()方法将返回预期的连接:

abstract class AbstractService {
  constructor(@InjectConnection() connection: Connection) {}
}

个字符

相关问题