什么inversify

它是JavaScript最大的DI库。在项目中引入inversify,可以使用Ioc和DI的方式来开发项目,开发体验和NestJS非常相近。

具体的配置可以参考 inversify的中文文档。

开发体验

@cloudbase/lcap-business-sdk 是基于此开发的行业侧工具库,里面封装常见的日志、缓存、并发控制台、上下文、文件存储等基础模块,也有像是生成二维码模块、生成短链接模块。

Untitled

项目结构如上所示:

生命周期钩子

beforeBootstrapHook的代码如下:

Untitled

在src/index.ts中引入并调用。

模块开发

交给Ioc管理的模块,需要使用@injectable()声明。例如对于日志模块来说:

import { injectable } from 'inversify';
import { getLocalDayjs } from '../../utils';
import { ILogInfo } from './logger.interface';

@injectable()
export class LoggerService {
  public info(logInfo: ILogInfo) {
    this.print({
      ...logInfo,
      logLevel: 'info',
    });
  }
  private print(logInfo: ILogInfo) {
    const now = getLocalDayjs().valueOf();
    const info = {
      logTime: now,
      ...logInfo,
    };

    console.log(JSON.stringify(info));
 }

如果此模块依赖其它模块,那么按照inversify的规范,有2种方法声明依赖:

Powered by Fruition