/// <reference types="ts-toolbelt" />
import { SF } from '../ServiceFactory';
import { ServiceFunctionReferenceContainerInterface } from '../Container/ServiceFunctionReferenceContainerInterface';
/**
 * Context for overriding services.
 */
export interface OverrideContext<T> {
    override: Overrides<T>;
}
export declare const createFeatureFactoryOverrideContext: (container: ServiceFunctionReferenceContainerInterface<any>) => OverrideContext<any>;
/**
 * TODO: original should be a function, so it's not always needed to execute service factory.
 */
declare type OverrideWith<T> = (original: SF<T>) => T;
export declare type Overrides<T> = {
    [K in keyof T]: (overrideWith: OverrideWith<T[K]>) => {};
};
export declare const overrideBy: import("Function/Curry").Curry<(container: ServiceFunctionReferenceContainerInterface<any>, serviceTagToOverride: string, overrideWith: OverrideWith<any>) => {}>;
export {};
