import type { Lifetime } from './Lifetime';
/**
 * Represents a token that can be used for dependency injection.
 * @template T The type of the token.
 *
 * @public
 */
export type Token<T> = new (...args: Array<any>) => T;
/**
 * Represents a dependency injection container.
 *
 * @public
 */
export declare class Container {
    private static _instance;
    private readonly _registry;
    /**
     * Constructs a new instance of the `Container` class.
     *
     * @protected
     */
    protected constructor();
    /**
     * Gets the singleton instance of the `Container` class.
     *
     * @public
     * @static
     * @readonly
     */
    static get instance(): Container;
    /**
     * Registers a provider for the specified token.
     *
     * @public
     * @param token - The token to register.
     * @param clazz - The class to associate with the token. If not provided, the token itself will be used as the class.
     * @param lifetime - The optional lifetime of the instance. If not provided, the default lifetime is 'singleton'.
     */
    provide<T>(token: Token<T>, clazz?: Token<T>, lifetime?: Lifetime): void;
    /**
     * Resolves an instance for the specified token.
     *
     * @public
     * @param token - The token to resolve.
     * @returns The resolved instance.
     * @throws Error if no instance is found for the token.
     */
    get<T>(token: Token<T>): T;
    /**
     * Read type information from metadata
     *
     * @private
     */
    private getInjectedParams;
}
//# sourceMappingURL=Container.d.ts.map