import { type ClassType } from '../types';
import { Provider, Token } from './provider';
import { ModuleDefinition } from './module';
export interface RequestContext {
    instances: Map<Token, unknown>;
}
export declare class Container {
    private modules;
    private rootProviders;
    private exportedProviders;
    private singletons;
    constructor(root: ModuleDefinition);
    createRequestContext(): RequestContext;
    get<T>(token: Token<T>, context?: RequestContext): T;
    has(token: Token, requestingModuleId?: number): boolean;
    resolve<T>(token: Token<T>, requestingModuleId?: number, context?: RequestContext, chain?: Token[], singletonInChain?: boolean, injectionTarget?: ClassType): T;
    listProviders(): Token[];
    listExports(): Token[];
    listRegisteredProviders(): {
        token: Token;
        provider: Provider;
        moduleId: number;
        exported: boolean;
    }[];
    private compile;
    private compileImportedModule;
    private addModule;
    private addImportedExports;
    private registerProvider;
    private registerRootProvider;
    private registerExport;
    private findRegisteredProvider;
    private instantiate;
    private instantiateClass;
    private getConstructorDependencies;
}
export declare function createContainer(definition: ModuleDefinition): Container;
//# sourceMappingURL=container.d.ts.map