import { AsyncHandler } from '@tsdi/ioc';
import { ICoreInjector } from '@tsdi/core';
import { Handle, Handles, HandleType } from '@tsdi/boot';
import { IContext } from '../IContext';
import { IMiddleware } from './IMiddleware';
/**
 * middleware
 *
 * @export
 * @abstract
 * @class Middleware
 * @extends {Handle<MvcContext>}
 * @implements {IMiddleware}
 */
export declare abstract class MvcMiddleware extends Handle<IContext> implements IMiddleware {
    private _injector;
    /**
     * get injector of current message queue.
     */
    getInjector(): ICoreInjector;
    static ρAnn(): any;
}
/**
 * composite middleware.
 *
 * @export
 * @class CompositeMiddleware
 * @extends {Handles<IContext>}
 */
export declare class CompositeMiddleware extends Handles<IContext> {
    private _injector;
    /**
     * get injector of current message queue.
     */
    getInjector(): ICoreInjector;
    find(filter: (item: HandleType<IContext>) => boolean): import("@tsdi/ioc").ActionType<import("@tsdi/boot").IHandle<IContext>, import("@tsdi/ioc").Handler<IContext, Promise<void>>>;
    /**
     * use handle before
     *
     * @param {HandleType} handle
     * @param {HandleType} [before]
     * @returns {this}
     * @memberof LifeScope
     */
    useBefore(handle: HandleType<IContext>, before?: HandleType<IContext>): this;
    /**
     * use handle after.
     *
     * @param {HandleType} handle
     * @param {HandleType} [after]
     * @returns {this}
     * @memberof LifeScope
     */
    useAfter(handle: HandleType<IContext>, after?: HandleType<IContext>): this;
    protected registerHandle(HandleType: HandleType<IContext>): this;
    protected toHandle(handleType: HandleType<IContext>): AsyncHandler<IContext>;
    static ρAnn(): any;
}
