autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
89 lines (88 loc) • 3.64 kB
TypeScript
import Logger from '../infrastructure/logging/Logger.js';
import type { ServiceMap } from './ServiceMap.js';
/**
* DependencyInjection 容器
* 管理所有应用层的仓储、服务和基础设施依赖的创建和注入
*/
export declare class ServiceContainer {
#private;
logger: ReturnType<typeof Logger.getInstance>;
_aiDependentSingletons: string[];
services: Record<string, () => unknown>;
singletons: Record<string, unknown>;
constructor();
/**
* 注册一个惰性单例服务 — 消除 `if (!this.singletons.xxx)` 样板代码
*
* @param name 服务名称
* @param factory 工厂函数(首次 get 时执行)
* @param [options] 选项
* - aiDependent: 标记为 AI Provider 依赖项,热重载时自动清除缓存
*/
singleton(name: string, factory: (container: ServiceContainer) => unknown, options?: {
aiDependent?: boolean;
}): void;
/** 静态单例获取(路由层使用) */
static getInstance(): ServiceContainer;
/**
* 初始化所有服务和仓储
* @param bootstrapComponents Bootstrap 初始化的组件(db, auditLogger, gateway 等)
*/
initialize(bootstrapComponents?: Record<string, unknown>): Promise<void>;
/**
* 热重载 AI Provider(API Key 变更后调用,无需重启进程)
*
* 委托给 AiProviderManager.switchProvider() — 原子操作:
* 1. 替换 provider 引用 + DI 数据管道同步
* 2. Token 追踪 AOP 重新挂载
* 3. Embedding fallback 重建
* 4. 清除已缓存的依赖 AI 的 singleton(SearchEngine 等)
* 5. 监听器回调通知
*/
reloadAiProvider(newProvider: Record<string, unknown> | null): void;
/** 获取当前默认 UI 语言偏好 */
getLang(): {} | null;
/** 设置默认 UI 语言偏好(影响 Agent 回复语言) */
setLang(lang: 'zh' | 'en' | null): void;
/**
* 构建 ToolRegistry.execute() 所需的上下文对象。
*
* 工具执行上下文构建
* 迁移后: 所有直接调用 ToolRegistry 的站点都使用此方法
*
* @param [extras] 合并到上下文的额外字段
* @returns 工具执行上下文
*/
buildToolContext(extras?: Record<string, unknown>): Record<string, unknown>;
/** 注册服务或工厂函数 */
register(name: string, factory: () => unknown): void;
/**
* 获取服务(类型安全版本)
*
* 当传入 ServiceMap 中已知的 key 时,自动推导返回类型:
* ```ts
* const search = container.get('searchEngine'); // SearchEngine
* const guard = container.get('guardService'); // GuardService
* ```
*
* 对于非 ServiceMap 中的 key,返回 unknown(向后兼容)。
*/
get<K extends keyof ServiceMap>(name: K): ServiceMap[K];
get(name: string): unknown;
/** 清除所有单例(用于测试) */
reset(): void;
/** 获取所有已注册的服务名 */
getServiceNames(): string[];
/**
* 构建 ProjectGraph (v3.0 AST 结构图)
* 优先从磁盘缓存加载,支持 per-file hash 增量更新
* @param projectRoot 项目根目录
* @param [options] 传递给 ProjectGraph.build() 的选项
*/
buildProjectGraph(projectRoot: string, options?: Record<string, unknown>): Promise<{} | null>;
}
/** 获取全局服务容器实例 */
export declare function getServiceContainer(): ServiceContainer;
/** 重置全局服务容器(主要用于测试) */
export declare function resetServiceContainer(): void;
export default ServiceContainer;