快速上手
安装
在项目目录执行如下的命令:
yarn add @wendellhu/redi或者使用 npm 等其他包管理器:
npm install @wendellhu/redi安装之后,你需要在 tsconfig.json 文件中启用 experimentalDecorators 。
{
  "compilerOptions": {
    "experimentalDecorators": true
  }
}💡
为了让大家能够方便地使用依赖注入模式开始一个新项目,我们准备了脚手架工具。阅读设置开发环境一节了解更多。
基本使用
这里介绍 redi 的基本使用方法。我们来看这样的一个例子,在获取文件列表之前,我们需要先获取权限信息:
class AuthService {
  public static getCurrentUserInfo(): UserInfo {
    // your implementation here...
  }
}
 
class FileListService {
  constructor() {}
 
  public getUserFiles(): Promise<Files> {
    const currentUser = AuthService.getCurrentUserInfo();
    // ...
  }
}显然,FileListService 依赖于 AuthService,让我们一起来看看如何使用依赖注入模式改造这段代码。
第一步:声明依赖关系
import { Inject } from "@wendellhu/redi";
 
class AuthService {
  public getCurrentUserInfo(): UserInfo {
    // your implementation here...
  }
}
 
class FileListService {
  constructor(@Inject(AuthService) private readonly authService: AuthService) {}
 
  public getUserFiles(): Promise<Files> {
    const currentUser = this.authService.getCurrentUserInfo();
    // ...
  }
}使用 Inject 装饰器,在 FileListService 的构造函数上,将 AuthService 声明为它的一个依赖。
第二步:提供绑定
import { Injector } from "@wendellhu/redi";
 
const injector = new Injector([[FileListService], [AuthService]]);只需要将依赖项添加到 Injector 对象中。
第三步:从注入器获取依赖
const fileListService = injector.get(FileListService);这样你就获得了 FileListService 的一个实例!而且它的依赖 AuthService 已经被创建好了,缓存在 Injector 当中。
const authService = injector.get(FileListService);阅读下一章节以了解依赖注入模式中的基本概念。