import { ServiceIdentifier } from '@inversifyjs/common';
import { BindingActivation, BindingDeactivation } from '@inversifyjs/core';
import { BindToFluentSyntax } from '../../binding/models/BindingFluentSyntax';
import { BindingIdentifier } from '../../binding/models/BindingIdentifier';
import { IsBoundOptions } from './isBoundOptions';
export type Bind = <T>(serviceIdentifier: ServiceIdentifier<T>) => BindToFluentSyntax<T>;
export type IsBound = (serviceIdentifier: ServiceIdentifier, options?: IsBoundOptions) => boolean;
export type OnActivation = <T>(serviceIdentifier: ServiceIdentifier<T>, activation: BindingActivation<T>) => void;
export type OnDeactivation = <T>(serviceIdentifier: ServiceIdentifier<T>, deactivation: BindingDeactivation<T>) => void;
export type Rebind = <T>(serviceIdentifier: ServiceIdentifier<T>) => Promise<BindToFluentSyntax<T>>;
export type RebindSync = <T>(serviceIdentifier: ServiceIdentifier<T>) => BindToFluentSyntax<T>;
export type Unbind = (identifier: BindingIdentifier | ServiceIdentifier) => Promise<void>;
export type UnbindSync = (identifier: BindingIdentifier | ServiceIdentifier) => void;
export interface ContainerModuleLoadOptions {
    bind: Bind;
    isBound: IsBound;
    onActivation: OnActivation;
    onDeactivation: OnDeactivation;
    rebind: Rebind;
    rebindSync: RebindSync;
    unbind: Unbind;
    unbindSync: UnbindSync;
}
export declare class ContainerModule {
    #private;
    constructor(load: (options: ContainerModuleLoadOptions) => void | Promise<void>);
    get id(): number;
    load(options: ContainerModuleLoadOptions): void | Promise<void>;
}
//# sourceMappingURL=ContainerModule.d.ts.map