import type { interfaces } from 'inversify';
import type { InversifyContext } from './inversify/inversify-protocol';
import { Syringe } from './core';
export declare function toRegistryOption<P>(options: Syringe.InjectOption<P>): Syringe.FormattedInjectOption<P>;
export declare class Register<T> {
    static globalConfig: Syringe.InjectOption<any>;
    /**
     * 注册目标 token，合并 token 配置后基于配置注册
     */
    static resolveTarget<R>(context: Syringe.Container, target: Syringe.Token<R>, option?: Syringe.TargetOption<R>): void;
    /**
     * 基于配置注册
     */
    static resolveOption<R>(context: Syringe.Container, baseOption: Syringe.InjectOption<R>): void;
    protected token: Syringe.UnionToken<T>;
    protected rawToken: Syringe.Token<T>;
    protected named?: Syringe.Named;
    /**
     * 兼容 inversify
     */
    protected generalToken: interfaces.ServiceIdentifier<T>;
    protected option: Syringe.FormattedInjectOption<T>;
    protected context: Syringe.Container;
    protected mutiple: boolean;
    constructor(context: Syringe.Container, token: Syringe.UnionToken<T>, option: Syringe.FormattedInjectOption<T>);
    /**
     * multi or mono register
     * mono bind 优先级 useValue > useDynamic > useFactory > useClass
     */
    resolve(): void;
    protected resolveMono(context: InversifyContext): interfaces.BindingWhenOnSyntax<T> | undefined;
    protected resolveMutilple(context: InversifyContext): void;
}
