UNPKG

@thatcompany/ts-tool

Version:

基于TypeScript编写的工具库

77 lines (76 loc) 2.8 kB
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 {};