一个简单的依赖注入工具,用于Typescript和Node.js平台。
-
安装依赖
如果使用的是
yarn
,在命令行输入> yarn add super-simple-di
如果使用的是
npm
,在命令行输入> npm -i super-simple-di
-
导入模块
使用
import
语句进行导入。import * as ssimpleDI from 'simple-di';
-
声明 Bean
使用
Component
装饰器声明需要注入成为 Bean 的组件。@ssimpleDI.Component class A { // 省略该类的代码 }
-
导入 Bean 并初始化
在 Nodejs 应用入口里使用
Module
装饰器导入前面声明的 Bean ,并调用init()
方法进行初始化。// 省略导入的模块 @ssimpleDI.Module([ A, // 省略其它 Bean ]) class Module {} ssimpleDI.init() // 省略其它的代码
-
使用
getInstance()
方法从 Bean 容器中获取实例// ... let a = ssimpleDI.getInstance<A>(A); // ...
装饰器在TypeScript中还属于实验特性。因此,要使用装饰器特性需要添加两个编译参数:--target ES5
和--experimentalDecorators
。
-
目录结构
. ├─dist ├─src │ ├─a.ts │ ├─b.ts │ └─main.ts └─others
-
文件内容
// file: a.ts import * as ssimpleDI from 'simple-di'; @ssimpleDI.Component export class A { a = 'a'; }
// file: b.ts import * as ssimpleDI from 'ssimple-di'; import { A } from './a.ts'; @ssimpleDI.Component export class B { b = 'b'; constructor(private a: A) {} getA(): A { return this.a; } }
// file: main.ts import { strict as assert } from 'assert'; import * as ssimpleDI from 'ssimple-di'; import { A } from './a.ts'; import { B } from './b.ts'; @ssimpleDI.Module([ B, A ]) export class Module {} ssimpleDI.init(); let a = ssimpleDI.getInstance<A>(A); let b = ssimpleDI.getInstance<B>(B); assert.strictEqual(a.a, 'a'); // OK assert.strictEqual(b.b, 'b'); // OK assert.deepStrictEqual(b.getA(), a); // OK