@thatcompany/ts-tool
Version:
基于TypeScript编写的工具库
77 lines (76 loc) • 2.8 kB
TypeScript
import 'reflect-metadata';
import { TConstructor } from '../../../types';
import { IAutoManager } from './IAutoManager';
import { ICronTaskRegister } from '../slot';
import { ApplicationEventPublisher } from '../slot';
/**
* 自动装配管理器
*/
declare class ApplicationManager {
protected factory: TConstructor<IAutoManager>[];
protected managerChain: IAutoManager[];
/**
* 装配完成后的服务集合
* key: symbol 装配的服务类型
* value: Set<any> 装配的服务实例集合
*
* 例如: 获取所有调度任务注解的服务实例集合
* @example
* ```typescript
* import { ApplicationContext } from '@that-tool';
* // 获取所有调度任务注解的服务实例集合
* const cronTasks = ApplicationContext.services.get(METADATA.TASK.CRON);
* // 进一步获取名字为 CronTaskRegister 的服务实例
* const cronTaskRegister = cronTasks.get('CronTaskRegister');
* // 进一步获取每个调度任务实例ICronTaskService的线程池状态
* const register = ApplicationContext.getCronTasks();
* for (const [ id, task ] of register.get('CronTaskRegister')!.services){
* Logger.info("正在挂起的线程:", task._queuePending)
* Logger.info("正在执行的线程:", task._queueThread)
* }
* ```
*/
services: Map<symbol, Map<string, any>>;
eventPublisher: ApplicationEventPublisher;
add(china: TConstructor<IAutoManager>): this;
build(baseDir?: string): Promise<void>;
protected loadModule(path: string): Promise<void>;
/**
* 扫描并自动装配
* @param scanDir 基于目录扫描 默认 src
*/
protected scan(scanDir?: string): Promise<void>;
protected execute(): Promise<void>;
getEventListeners(): Map<string, {
instance: any;
method: Function;
sort: number;
}[]>;
/**
* 获取所有调度任务的服务实例集合
*/
getCronTasks(): Map<string, ICronTaskRegister>;
}
/**
* 自动装配管理器上下文
*
* 用于在不同模块之间共享装配器实例
*
* 构建时add添加管理链路,build构建装配链路并执行装配
*
* 默认添加了 ConfigureManager、FrameWorkManager、TaskManager 三个管理器, 可直接build()
* @example
* ```typescript
* import { ApplicationContext } from '@that-tool';
*
* (async () => {
* // await ApplicationContext.add(ConfigureManager).build();
* await ApplicationContext.build();
* // 装配完成后可通过 ApplicationContext.services 获取装配的服务
* Logger.info(ApplicationContext.services);
* })();
* ```
*/
export declare const ApplicationContext: ApplicationManager;
export declare let EventPublisher: ApplicationEventPublisher;
export {};