You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
1.7 KiB

# -*- coding: utf-8 -*-
"""
===================================
API 依赖注入模块
===================================
职责:
1. 提供数据库 Session 依赖
2. 提供配置依赖
3. 提供服务层依赖
"""
from typing import Generator
from fastapi import Request
from sqlalchemy.orm import Session
from src.storage import DatabaseManager
from src.config import get_config, Config
from src.services.system_config_service import SystemConfigService
def get_db() -> Generator[Session, None, None]:
"""
获取数据库 Session 依赖
使用 FastAPI 依赖注入机制,确保请求结束后自动关闭 Session
Yields:
Session: SQLAlchemy Session 对象
Example:
@router.get("/items")
async def get_items(db: Session = Depends(get_db)):
...
"""
db_manager = DatabaseManager.get_instance()
session = db_manager.get_session()
try:
yield session
finally:
session.close()
def get_config_dep() -> Config:
"""
获取配置依赖
Returns:
Config: 配置单例对象
"""
return get_config()
def get_database_manager() -> DatabaseManager:
"""
获取数据库管理器依赖
Returns:
DatabaseManager: 数据库管理器单例对象
"""
return DatabaseManager.get_instance()
def get_system_config_service(request: Request) -> SystemConfigService:
"""Get app-lifecycle shared SystemConfigService instance."""
service = getattr(request.app.state, "system_config_service", None)
if service is None:
service = SystemConfigService()
request.app.state.system_config_service = service
return service