使用服务
在 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` 才会生效。
🎨 本文大部分内容转载自他人文章,若有问题可点击文章作者查看原文