假设我有一个抽象的服务,比如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
}
}
型
1条答案
按热度按时间hmae6n7t1#
当
UserService
扩展AbstractService
时,它将扩展它的所有成员,如方法或构造函数,但它不会扩展connection
,因为它是一个必须注入的装饰器,这就是为什么在第一个例子中this.connection
是undefined
,所以你必须处理它。在第二个例子中,
UserService
没有扩展任何东西,它有自己的connection
,所以它可以工作,这是显而易见的,但我们需要扩展AbstractService
,以便我们可以使用它的方法。一种解决方案是让
UserService
拥有自己的connection
,并且一旦创建,就调用父类构造函数,并将connection
传递给它。在这种情况下,
get()
方法将返回预期的连接:个字符