import { InjectorConstructorArgument } from '..';
/**
 * @class RokkitDI
 * This class exposes the API to register Injectables on the dependencies container.
 * The container is maintained as a singleton, so that all module of your application use the same container nad get the same injectors.
 * In order to retrieve an instance you can decide if you want to get an singleton or a new instance.
 */
declare class DependencyInjectionContainer {
    private readonly injectables;
    private readonly instances;
    registerInjectable<T extends object>(classConstructor: new (...args: any[]) => T, classConstructorArguments?: any[] | InjectorConstructorArgument[]): DependencyInjectionContainer;
    /**
     * @function singletonOf
     * This function let's you retrieve a registered intjector as a singleton object. That means
     * that each next call will get the exact same instances.
     * @param injectable:string Name of the class you want to retrieve
     * @returns any object that is already stored or we be create by the corresponding injector
     */
    singletonOf(injectable: string): any;
    /**
     * @function instanceOf
     * This function let's you create new instance of the registered injector.
     * That means that every time you call this function you will retrieve a new object.
     * @param injectable:string Name of the class you want to retrieve
     * @returns any new object that is created by the corresponding injector
     */
    instanceOf(injectable: string): any;
    private updateProvidedWithScannedArguments;
    private instantiateSingleton;
    private injectorFor;
    private instanctiateArgValues;
    private isUserObject;
}
export declare const RokkitDI: DependencyInjectionContainer;
export {};
