import { ReflectiveProvider } from './injector-provider';
import { InjectionProvider } from './provider';
import { Provider } from './type';
export declare class Injector {
    protected readonly parent: Injector | null;
    readonly provider: InjectionProvider;
    protected readonly resolvedProviders: Map<ReflectiveProvider<unknown>, unknown>;
    protected readonly providersCache: Map<Provider, 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 getInstanceInternal;
    private resolveByReflectiveProvider;
    private findExisting;
    private findDeps;
    private checkDependenciesClean;
}
