import type { Disposable } from '@difizen/mana-common';
import { DisposableCollection, Emitter } from '@difizen/mana-common';
import type { interfaces } from 'inversify';
import { Syringe } from './core';
import type { InversifyContext } from './inversify-api/inversify-protocol';
export declare const ContainerMeta: unique symbol;
export declare class Container implements Syringe.Container, InversifyContext, Disposable {
    disposed?: boolean | undefined;
    protected toDisposeOnParentChange: DisposableCollection;
    protected onModuleChangedEmitter: Emitter<void>;
    get onModuleChanged(): import("@difizen/mana-common").Event<void>;
    protected onRegisteredEmitter: Emitter<void>;
    get onRegistered(): import("@difizen/mana-common").Event<void>;
    protected _parent?: Container | undefined;
    get parent(): Container | undefined;
    set parent(p: Container | undefined);
    static config(option: Syringe.InjectOption<void>): void;
    protected loadedModules: number[];
    container: interfaces.Container;
    constructor(inversifyContainer?: interfaces.Container);
    dispose(): void;
    load(module: Syringe.Module, force?: boolean, deep?: boolean): void;
    unload(module: Syringe.Module): void;
    remove<T>(token: Syringe.Token<T>): void;
    get<T>(token: Syringe.Token<T>): T;
    getNamed<T>(token: Syringe.Token<T>, named: Syringe.Named): T;
    getAll<T>(token: Syringe.Token<T>): T[];
    getAllNamed<T>(token: Syringe.Token<T>, named: Syringe.Named): T[];
    isBound<T>(token: Syringe.Token<T>): boolean;
    isBoundNamed<T>(token: Syringe.Token<T>, named: Syringe.Named): boolean;
    createChild(): Syringe.Container;
    register<T = any>(tokenOrOption: Syringe.Token<T> | Syringe.InjectOption<T>): void;
    register<T = any>(token: Syringe.Token<T>, options: Syringe.InjectOption<T>): void;
}
export declare const GlobalContainer: Container;
export declare const register: Syringe.Register;
//# sourceMappingURL=container.d.ts.map