import type { IContainer } from '../container/IContainer';
export type InjectFn<T = unknown> = (s: IContainer) => T;
export interface IHookContext {
    instance: object;
    scope: IContainer;
    methodName?: string;
    resolveArgs(...args: unknown[]): unknown[];
    invokeMethod({ args }: {
        args?: unknown[];
    }): unknown;
    setProperty(fn: InjectFn): void;
}
export declare class HookContext implements IHookContext {
    instance: object;
    scope: IContainer;
    methodName?: string | undefined;
    constructor(instance: object, scope: IContainer, methodName?: string | undefined);
    resolveArgs(...args: unknown[]): unknown[];
    invokeMethod({ args }: {
        args?: unknown[];
    }): unknown;
    setProperty(fn: InjectFn): void;
}
export type CreateHookContext = (Target: object, scope: IContainer, methodName?: string) => IHookContext;
export declare const createHookContext: CreateHookContext;
export declare const hookMetaKey: (methodName?: string) => string;
