import type { ClassConstructor } from '../type/utils';
/**
 * Class Container
 * @description zh-CN 容器类，所有需要注入到核心容器的方法或者类都源于此
 * @author SunnyXu <xy@ztes.com>
 */
export declare class Container {
    protected static instance: Container | null;
    protected instances: Map<any, any>;
    protected bindings: Record<string, any>;
    protected aliases: Record<string, any>;
    /**
     * method bind
     * @description zh-CN 绑定方法
     * @param abstract
     * @param concrete
     */
    bind(abstract: string | string[], concrete: any): void;
    /**
     * make 创建类的实例/获取对象 create instance/object
     * @param abstract
     * @param params
     * @param shared
     */
    make(abstract: string, params?: Record<string, any> | [], shared?: boolean): any;
    /**
     * makeClass 创建类
     * @param name
     * @param Executor
     * @param params
     * @param shared
     */
    protected makeClass(name: string, Executor: ClassConstructor, params: unknown, shared?: boolean): any;
    /**
     * makeFunc 创建函数
     * @param name
     * @param executor
     * @param params
     * @param shared
     * @protected
     */
    protected makeFunc(name: string, executor: CallableFunction, params: unknown, shared?: boolean): any;
    /**
     * has as existence
     * 是否存在标识 existence 的别名
     * @param {String} name
     */
    has(name: string): boolean;
    /**
     * existence 存在标识
     * @param {String} name
     */
    existence(name: string): boolean;
    /**
     * getAlias 获取别名
     * @param abstract
     */
    getAlias(abstract: string): any;
    /**
     * get 获取实例
     * @param abstract
     */
    get(abstract: string): any;
    /**
     * singleton 单例
     * @param abstract
     * @param concrete
     */
    singleton(abstract: string, concrete: any): void;
    /**
     * getInstance 获取实例
     *
     */
    static getInstance<Instance extends Container>(): Container | Instance;
    /**
     * proxyInstance 代理实例
     *
     */
    protected proxyInstance(): this;
}
