import { ScopeAccessOptions, ArgsFn, ScopeAccessFn, IProvider, ProviderResolveOptions, ResolveDependency } from './IProvider';
import type { DependencyKey, IContainer } from '../container/IContainer';
import type { constructor, MapFn } from '../utils';
import type { ProviderPipe } from './ProviderPipe';
export declare class Provider<T = any> implements IProvider<T> {
    private readonly resolveDependency;
    static fromClass<T>(Target: constructor<T>): IProvider<T>;
    static fromValue<T>(value: T): IProvider<T>;
    static fromKey<T>(key: DependencyKey): Provider<T>;
    private argsFn;
    private checkAccess;
    constructor(resolveDependency: ResolveDependency<T>);
    pipe(...mappers: (MapFn<IProvider<T>> | ProviderPipe<T>)[]): IProvider<T>;
    resolve(container: IContainer, { args, lazy: isLazy }: ProviderResolveOptions): T;
    setAccessPredicate(predicate: ScopeAccessFn): this;
    setArgs(argsFn: ArgsFn): this;
    hasAccess(options: ScopeAccessOptions): boolean;
}
