import { TConstructor } from '../types';
/**
 * Standalone injector class.
 */
declare class Injector {
    /**
     * Create a new class injector.
     *
     * @return {Injector}
     */
    static create(): Injector;
    /**
     * Check whether a class is injected.
     *
     * @param Provider
     */
    private static checkIsInjected;
    /**
     * This map keeps singleton provider and its instance.
     */
    private readonly singletonMap;
    /**
     * This map keeps transient provider.
     */
    private readonly transient;
    /**
     * Register target as a singleton provider.
     * You will get the same instance in every single initialization.
     *
     * @param {TConstructor[]} Providers
     */
    addSingleton(...Providers: TConstructor[]): this;
    /**
     * Register target as a transient provider.
     * You will get different instances in every single initialization.
     *
     * @param {TConstructor[]} Providers
     */
    addTransient(...Providers: TConstructor[]): this;
    /**
     * Get target instance from injector by providing provider.
     *
     * @param {{new(...args): T}} Provider
     * @return {T}
     */
    get<T>(Provider: new (...args: any[]) => T): T;
    /**
     * Check whether injector has registered this provider.
     *
     * @param target
     */
    has(target: TConstructor): boolean;
}
export { Injector };
