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 {};
