import { Provider } from './type';
import { ReflectiveProvider } from './injector-provider';
import { InjectionProvider } from './provider';
export declare class Injector {
    protected readonly parent: Injector | null;
    readonly provider: InjectionProvider;
    protected readonly resolvedProviders: Map<ReflectiveProvider<unknown>, unknown>;
    protected readonly providersCache: Map<Provider<unknown>, ReflectiveProvider<unknown>>;
    constructor(parent?: Injector | null);
    addProvider<T extends Provider<any>>(provider: T): T;
    addProviders(providers: Provider[]): this;
    getInstance<T>(provider: Provider<T>): T;
    resolveAndInstantiate<T>(provider: Provider<T>): T;
    createChild(providers: Provider<unknown>[]): Injector;
    private resolveReflectiveProvider;
    private _getInstance;
    private _resolveByReflectiveProvider;
    private _findExisting;
    private _findDeps;
    private _checkDepenciesClean;
}
