import { type ArgsFn, type DecorateFn, type GetCacheKey, type IProvider, type ProviderOptions, type ResolveDependency, type ScopeAccessOptions, type ScopeAccessRule } from './IProvider';
import type { DependencyKey, IContainer } from '../container/IContainer';
import { type constructor } from '../utils/basic';
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 readonly argsFnList;
    private readonly accessRules;
    private readonly mappers;
    private isLazy;
    private cache;
    private getKey;
    private isDisposed;
    constructor(resolveDependency: ResolveDependency<T>);
    resolve(scope: IContainer, options: ProviderOptions): T;
    private resolveDep;
    map(...mappers: DecorateFn<T>[]): this;
    addAccessRule(...rules: ScopeAccessRule[]): this;
    lazy(): this;
    addArgsFn(...fns: ArgsFn[]): this;
    hasAccess(options: ScopeAccessOptions): boolean;
    singleton(getCacheKey?: GetCacheKey): this;
    dispose(): void;
}
