MidwayJs在Controller里调用Service

MidwayJs 57 0

使用服务

在 Controller 处,我们需要来调用这个服务。传统的代码写法,我们需要初始化这个 Class(new),然后将实例放在需要调用的地方。在 Midway 中,你不需要这么做,只需要编写我们提供的** "依赖注入" **的代码写法。

import { Inject, Controller, Post, Provide, Query } from '@midwayjs/decorator';
import { UserService } from '../service/user';

@Provide()
@Controller('/api/user')
export class APIController {

  @Inject()
  userService: UserService;

  @Get('/')
  async getUser(@Query('id') uid) {
    const user = await this.userService.getUser(uid);
    return {success: true, message: 'OK', data: user};
  }
}

使用服务的过程分为几部分:

  • 1、使用 @Provide 装饰器暴露你的服务
  • 2、在调用的代码处,使用 @Inject 装饰器注入你的服务
  • 3、调用注入服务,执行对应的方法

Midway 的核心 “依赖注入” 容器会自动关联你的控制器(Controller) 和服务(Service),在运行过程中会自动初始化所有的代码,你无需手动初始化这些 Class。

这里导入 UserService 是为了增加类型提示,实际运行过程中并不需要。

注入行为描述

看到这里,你应该明白为什么控制器(Controller) 和服务(Service)上都有一个 @Provide 装饰器。不仅如此,之后的大部分代码中,你都会发现这个装饰器。

@Provide 装饰器的作用:

  • 1、这个 Class,被依赖注入容器托管,会自动被实例化(new)
  • 2、这个 Class,可以被其他在容器中的 Class 注入

而对应的 @Inject 装饰器,作用为:

  • 1、在依赖注入容器中,找到对应的属性名,并赋值为对应的实例化对象
`@Inject` 的类中,必须有 `@Provide` 才会生效。

发表评论 取消回复
OwO 图片 链接 代码

分享