用途:指导把服务按正确方式集成到基于 dependency-injector 库的依赖注入 Container 中,主要涉及 container.py 与 container_factory.py 文件。适用于新增服务、为 Container 添加依赖、排查循环依赖错误、为注入接线组件,以及设置测试覆盖(mock 依赖)。触发说法包括“把 X 加入依赖容器”“为 Y 服务接线依赖”“修复循环依赖错误”“为测试覆盖依赖”。
主要能力与用法:
- 选择 Provider 类型:有状态、初始化昂贵或需跨请求共享的服务(仓库、缓存、数据库连接、嵌入模型)用 providers.Singleton;请求处理器、无状态操作、每次调用需新实例的短生命周期对象用 providers.Factory;运行时提供的外部依赖、配置对象(Settings)、外部基础设施连接用 providers.Dependency。
- 接入 Container:在 container.py 对应分层区段添加 provider,例如 my_service = providers.Singleton(MyService, settings=settings, dependency1=some_dependency)。定义顺序上依赖要先于依赖者,避免循环引用。
- 特殊场景:复杂初始化可用工厂函数配合 providers.Singleton;配置值可提取(如 lambda s: s.chunking.boundary_adjustment_lines);避免循环依赖可通过调整 provider 顺序、用 providers.Factory 延迟求值、或把共享依赖提取为独立 provider。
- 测试覆盖:在 conftest.py 或测试方法中用 container.settings.override(...)、container.neo4j_driver.override(mock_driver) 覆盖依赖;注意所有 Dependency 类型的 provider 都需在测试夹具中覆盖,否则报“Dependency not set”。Settings/Config 不要设为可选参数,应使用 providers.Dependency(instance_of=Settings)。
- 工厂初始化:在 container_factory.py 的 initialize_container_and_services 中覆盖外部依赖并有副作用地初始化服务。
质量检查:添加后运行 uv run pyright src/project_watch_mcp/interfaces/mcp/container.py 做类型检查,并用 uv run pytest tests/integration/container/ -v 跑测试。
依赖与资源:需 uv pip install dependency-injector;配套有 provider 参考、循环依赖指南、服务模板及循环依赖检测、provider 生成、DI 模式校验脚本。
限制:资料未提供其他安装方式、收费信息或跨语言支持说明;具体项目路径与文件名来自资料,实际使用需按自身项目调整。