import { ComponentContainer } from './component-container';
export declare const enum InstantiationMode {
    LAZY = "LAZY",
    EAGER = "EAGER"
}
export interface InstanceFactoryOptions {
    options?: {};
}
/**
 * Factory to create an instance of type T, given a ComponentContainer.
 * ComponentContainer is the IOC container that provides {@link Provider}
 * for dependencies.
 *
 * NOTE: The container only provides {@link Provider} rather than the actual instances of dependencies.
 * It is useful for lazily loaded dependencies and optional dependencies.
 */
export declare type InstanceFactory<T extends Name> = (container: ComponentContainer, options: InstanceFactoryOptions) => NameServiceMapping[T] | Promise<NameServiceMapping[T]>;
/**
 * This interface will be extended by Amo SDKs to provide service name and service type mapping.
 * It is used as a generic constraint to ensure type safety.
 */
export interface NameServiceMapping {
}
export declare type Name = keyof NameServiceMapping;
export declare type Service = NameServiceMapping[Name];
export declare type RemoteInstanceUrl = string;
