import type { ServiceIdentifier } from '../common/explicit-binding';
export type LegacyNamedIdentifier = string | number | symbol;
export interface ILegacyBindingResolveContext {
    container: ILegacyBindingContext;
}
export interface ILegacyBindingSyntax<T = unknown> {
    to: (constructor: new (...args: any[]) => T) => ILegacyBindingSyntax<T>;
    toSelf: () => ILegacyBindingSyntax<T>;
    toDynamicValue: (factory: (context: ILegacyBindingResolveContext) => T) => ILegacyBindingSyntax<T>;
    toConstantValue: (value: T) => ILegacyBindingSyntax<T>;
    toService: (serviceIdentifier: ServiceIdentifier) => ILegacyBindingSyntax<T>;
    inSingletonScope: () => ILegacyBindingSyntax<T>;
    whenTargetNamed: (name: LegacyNamedIdentifier) => ILegacyBindingSyntax<T>;
}
export interface ILegacyBindContext {
    bind: <T>(serviceIdentifier: ServiceIdentifier<T>) => ILegacyBindingSyntax<T>;
}
export interface ILegacyBindingContext extends ILegacyBindContext {
    rebind: <T>(serviceIdentifier: ServiceIdentifier<T>) => ILegacyBindingSyntax<T>;
    isBound: <T>(serviceIdentifier: ServiceIdentifier<T>) => boolean;
    getAll: <T>(serviceIdentifier: ServiceIdentifier<T>) => T[];
    getNamed: <T>(serviceIdentifier: ServiceIdentifier<T>, name: LegacyNamedIdentifier) => T | undefined;
}
export declare function createLegacyBindingContext(): ILegacyBindingContext;
