获取 IoC 容器

所谓的容器就是一个对象池,它会在应用初始化的时候自动处理类的依赖,并将类进行实例化。比如下面的 UserService 类,在经过容器初始化之后,会自动实例化,并且对 userModel 进行赋值,看不到实例化的过程。

  1. class UserService {
  2. private userModel;
  3. async getUser(uid) {
  4. // TODO
  5. }
  6. }

Midway 内部使用了自动扫描的机制,在应用初始化之前,会扫描所有的文件,包含装饰器的文件会 自动绑定 到容器。

injection 的容器有几种:

  • AppliationContext 基础容器,提供了基础的增加定义和根据定义获取对象实例的能力
  • Container 用的最多的容器,做了上层封装,通过 bind 函数能够方便的生成类定义,midway 从此类开始扩展
  • RequestContext 用于请求链路上的容器,会自动销毁对象并依赖另一个容器创建实例。

其中 Container 是我们最常用的容器,下面的代码就是创建一个容器。

  1. import {Container} from 'injection';
  2. const container = new Container();