import { Creator, ProviderCallback, Module, Creates, Arguments } from "./types";
import { Token } from "./token";
declare class Container {
    private dependencies;
    private providers;
    private requests;
    constructor();
    add<T extends Creator>(token: Token<Creates<T>>, creator: T, args?: Arguments<T>): void;
    addAsync<T extends Creator>(token: Token<Creates<T>>, asyncCreator: Promise<T>, args?: Arguments<T>): Promise<void>;
    share<T extends Creator>(token: Token<Creates<T>>, creator: T, args?: Arguments<T>): void;
    shareAsync<T extends Creator>(token: Token<Creates<T>>, asyncCreator: Promise<T>, args?: Arguments<T>): Promise<void>;
    constant<T>(token: Token<T>, value: T): void;
    constantAsync<T>(token: Token<T>, asyncValue: Promise<T>): Promise<void>;
    private register;
    private registerAsync;
    get<T>(token: Token<T>): T;
    getAsync<T>(token: Token<T>): Promise<T>;
    provide(tokens: Token[], provider: ProviderCallback): void;
    provideAsync(tokens: Token[], asyncProvider: Promise<ProviderCallback>): void;
    use(module: Creator<Module>): void;
    useAsync(asyncModule: Promise<Creator<Module>>): void;
    private instantiate;
    private instantiateAsync;
    private create;
    private createAsync;
    private createSingle;
    private createSingleAsync;
    private resolve;
    private resolveAsync;
    private construct;
}
declare function createContainer(): Container;
export { Container, createContainer };
