/**
* @file 容器接口定义
* @description 定义依赖注入容器的核心接口
* @author JunBin.Yang
*/
import { ServiceKey, ServiceFactory, ServiceOptions } from './ServiceProvider';
/**
* 依赖注入容器接口
* 提供服务注册、解析、检查等核心能力
*/
export interface Container {
/**
* 注册服务
* @template T 服务类型
* @param key 服务标识符
* @param factory 服务工厂函数
* @param options 注册选项
*/
register<T>(key: ServiceKey, factory: ServiceFactory<T>, options?: ServiceOptions): void;
/**
* 解析服务实例
* @template T 服务类型
* @param key 服务标识符
* @param default_factory 默认服务工厂函数
* @returns 服务实例
* @throws 服务未注册时抛出异常
*/
resolve<T>(key: ServiceKey, default_factory?: ServiceFactory<T>): T;
/**
* 尝试解析服务实例
* @template T 服务类型
* @param key 服务标识符
* @returns 服务实例,未注册时返回 undefined
*/
tryResolve<T>(key: ServiceKey): T | undefined;
/**
* 检查服务是否已注册
* @param key 服务标识符
* @returns 是否已注册
*/
has(key: ServiceKey): boolean;
/**
* 注销服务
* @param key 服务标识符
* @returns 是否注销成功
*/
unregister(key: ServiceKey): boolean;
/**
* 清空所有已注册的服务
*/
clear(): void;
/**
* 创建子容器
* 子容器继承父容器的服务,但可以覆盖或新增服务
* @returns 子容器实例
*/
createChild(): Container;
}