配置

介绍

配置能力实际基于依赖注入,且和其他内置能力一样,不对目录结构有任何约束,你可以在任何位置组织配置。

对于每种配置,推荐实现一个配置基类,如果该配置可能根据当前环境有不同配置项,可以扩展配置基类。框架会根据当前环境加载正确的配置类。

使用 @Config() 装饰器标注配置类。

import { Config } from 'bwcx-ljsm';

@Config()
export default class DbConfig {
  host = '';
  database = 'testdb';
  port = 3306;
  user = 'test';
  pass: string | null = null;
}

使用 whenoverride 定义特定环境的配置类。

import { Config } from 'bwcx-ljsm';
import DbConfig from './db.config';

@Config(DbConfig, { when: 'development', override: true })
export default class DbConfigDev extends DbConfig {
  host = '127.0.0.1';
  pass = 'test';
}

TIP

@Config() 默认作用域是 Singleton

注入配置

需要使用配置时,直接注入基类即可,框架会自动根据环境选用实际对应的类。

由于采用基类作为标识符注入配置,要求所有继承基类的环境配置类不能额外添加基类不存在的属性,所有配置属性必须在基类有默认值。

import { Inject } from 'bwcx-core';
import { Controller, Get } from 'bwcx-ljsm';
import DbConfig from '../configs/db/db.config';

@Controller('/user')
export default class UserController {
  constructor(
    @Inject() private dbConfig: DbConfig;
  ) {}

  @Get('/get')
  async getUsers() {
    console.log(this.dbConfig);
    return { rows: [] };
  }
}