import { SingletonContainer } from './singleton-container.js';
import { ValueContainer } from './value-container.js';
export type InstanceOverrides = Map<symbol, SingletonContainer | ValueContainer>;
/**
 * Container class to manage the dependency injection container
 */
export declare class Container {
    private static instance;
    private static isInitialized;
    private constructor();
    /**
     * Get the singleton instance of the container
     */
    static getInstance(): Container;
    private static singletonContainers;
    private static valueContainers;
    private static factorySuppliers;
    /**
     * Initialize the container with the default dependencies
     * @param homeDirectory - the home directory to use, defaults to constants.SOLO_HOME_DIR
     * @param cacheDirectory - the cache directory to use, defaults to constants.SOLO_CACHE_DIR
     * @param logLevel - the log level to use, defaults to 'debug'
     * @param developmentMode - if true, show full stack traces in error messages
     * @param overrides - instances to use instead of the default implementations
     */
    init(homeDirectory?: string, cacheDirectory?: string, logLevel?: string, developmentMode?: boolean, overrides?: InstanceOverrides): void;
    /**
     * clears the container registries and re-initializes the container
     * @param homeDirectory - the home directory to use, defaults to constants.SOLO_HOME_DIR
     * @param cacheDirectory - the cache directory to use, defaults to constants.SOLO_CACHE_DIR
     * @param logLevel - the log level to use, defaults to 'debug'
     * @param developmentMode - if true, show full stack traces in error messages
     * @param overrides - instances to use instead of the default implementations
     */
    reset(homeDirectory?: string, cacheDirectory?: string, logLevel?: string, developmentMode?: boolean, overrides?: InstanceOverrides): void;
    /**
     * clears the container instances, useful for testing when you are using container.registerInstance()
     * @param homeDirectory - the home directory to use, defaults to constants.SOLO_HOME_DIR
     * @param cacheDirectory - the cache directory to use, defaults to constants.SOLO_CACHE_DIR
     * @param logLevel - the log level to use, defaults to 'debug'
     * @param developmentMode - if true, show full stack traces in error messages
     * @param overrides - instances to use instead of the default implementations
     */
    clearInstances(homeDirectory?: string, cacheDirectory?: string, logLevel?: string, developmentMode?: boolean, overrides?: InstanceOverrides): void;
    /**
     * only call dispose when you are about to system exit
     */
    dispose(): Promise<void>;
}
