获取 IoC 容器
所谓的容器就是一个对象池,它会在应用初始化的时候自动处理类的依赖,并将类进行实例化。比如下面的 UserService
类,在经过容器初始化之后,会自动实例化,并且对 userModel
进行赋值,看不到实例化的过程。
class UserService {
private userModel;
async getUser(uid) {
// TODO
}
}
Midway 内部使用了自动扫描的机制,在应用初始化之前,会扫描所有的文件,包含装饰器的文件会 自动绑定 到容器。
injection 的容器有几种:
- AppliationContext 基础容器,提供了基础的增加定义和根据定义获取对象实例的能力
- Container 用的最多的容器,做了上层封装,通过 bind 函数能够方便的生成类定义,midway 从此类开始扩展
- RequestContext 用于请求链路上的容器,会自动销毁对象并依赖另一个容器创建实例。
其中 Container
是我们最常用的容器,下面的代码就是创建一个容器。
import {Container} from 'injection';
const container = new Container();