@hestjs/core
Version:
HestJS Core Framework - A TypeScript framework built on Hono with dependency injection and decorators
85 lines • 2.29 kB
TypeScript
import "reflect-metadata";
import { DependencyContainer, InjectionToken } from "tsyringe";
import type { InjectableMetadata, ControllerMetadata, ModuleMetadata } from "../interfaces/metadata";
import type { ControllerConstructor } from "../interfaces/router";
import { Scope } from "../utils/constants";
declare global {
namespace Reflect {
function getMetadata(key: any, target: any, propertyKey?: string | symbol): any;
}
}
/**
* 逻辑容器项类型
*/
export interface LogicalContainerItem<T = any> {
token: InjectionToken<T>;
provider: T;
type: 'controller' | 'provider' | 'module';
metadata?: ControllerMetadata | InjectableMetadata | ModuleMetadata;
scope?: Scope;
}
/**
* 控制器容器项特化类型
*/
export interface ControllerContainerItem extends LogicalContainerItem<ControllerConstructor> {
type: 'controller';
metadata?: ControllerMetadata;
}
/**
* HestJS DI 容器封装
*/
export declare class Container {
private static instance;
private container;
private logicalContainer;
constructor();
/**
* 获取容器单例
*/
static getInstance(): Container;
/**
* 注册服务
*/
register<T>(token: InjectionToken<T>, provider: any, type?: 'controller' | 'provider' | 'module'): void;
/**
* 注册实例
*/
registerInstance<T>(token: InjectionToken<T>, instance: T): void;
/**
* 解析服务
*/
resolve<T>(token: InjectionToken<T>): T;
/**
* 检查是否已注册
*/
isRegistered<T>(token: InjectionToken<T>): boolean;
/**
* 清空容器
*/
clear(): void;
/**
* 创建子容器
*/
createChild(): Container;
/**
* 获取底层容器实例
*/
getContainer(): DependencyContainer;
/**
* 获取逻辑容器中的所有项
*/
getLogicalContainer(): Map<InjectionToken<any>, LogicalContainerItem>;
/**
* 获取指定类型的所有项
*/
getItemsByType(type: 'controller' | 'provider' | 'module'): LogicalContainerItem[];
/**
* 获取所有控制器
*/
getAllControllers(): ControllerContainerItem[];
/**
* 提取元数据信息
*/
private extractMetadata;
}
//# sourceMappingURL=container.d.ts.map