import { InjectionToken, ValueProvider, DependencyContainer } from 'tsyringe';
import { Constructor } from '../Type';
import { CommandHandlerType } from '../command/CommandBus';
import { QueryHandlerType } from '../query/QueryBus';
import TransactionAdapter from '../../port/out/TransactionAdapter';
export default class Injectable {
    static readonly TOKENS: {
        COMMAND_HANDLER: symbol;
        QUERY_HANDLER: symbol;
        TRANSACTION_HANDLER: string;
    };
    private static currentTransactionHandler;
    static resolve<T = unknown>(cls: InjectionToken<T>): T;
    static lazyResolve<T = unknown>(cls: Constructor<T>): T;
    static getQueryHandlers(): QueryHandlerType[];
    static getCommandHandlers(): CommandHandlerType[];
    static register<T = unknown>(token: InjectionToken<T>, value: ValueProvider<T>): DependencyContainer;
    static registerCommandHandler<T = unknown>(cls: ValueProvider<T>): DependencyContainer;
    static registerTransactionHandler<T extends TransactionAdapter>(cls: T): boolean;
    static resolveTransactionHandler(): TransactionAdapter;
    static registerTransactionAdapterInstances(): TransactionAdapter[];
    static isWeb(): boolean;
}
