import type { IContainer } from '../container/IContainer';
import { InjectionToken } from '../token/InjectionToken';
export interface IHookContext {
    instance: object;
    scope: IContainer;
    methodName?: string;
    resolveArgs(...args: unknown[]): unknown[];
    invokeMethod(options?: {
        args?: unknown[];
    }): unknown;
    setProperty(fn: InjectionToken): void;
    setInitialArgs(...args: unknown[]): this;
}
export declare class HookContext implements IHookContext {
    scope: IContainer;
    methodName?: string | undefined;
    readonly instance: object;
    private initialArgs;
    constructor(instance: object, scope: IContainer, methodName?: string | undefined);
    resolveArgs(...args: unknown[]): unknown[];
    invokeMethod({ args }?: {
        args?: unknown[];
    }): unknown;
    setProperty(fn: InjectionToken): void;
    setInitialArgs(...args: unknown[]): this;
}
export type CreateHookContext = (Target: object, scope: IContainer, methodName?: string) => IHookContext;
export declare const createHookContext: CreateHookContext;
export declare const createHookContextFactory: ({ args }?: {
    args?: unknown[];
}) => CreateHookContext;
