UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

89 lines (88 loc) 3.64 kB
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;