/super-simple-di

A simple dependency injection tool.

Primary LanguageTypeScriptApache License 2.0Apache-2.0

Super Simple DI

简介

一个简单的依赖注入工具,用于TypescriptNode.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