Skip to content

快速上手

安装

在项目目录执行如下的命令:

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)

阅读下一章节以了解依赖注入模式中的基本概念。