跳转至

setup_fastapi

symphra_container.integrations.setup_fastapi(app, container)

将容器绑定到 FastAPI 应用.

此函数会: 1. 将容器存储到全局变量中供 inject() 使用 2. 配置生命周期管理(自动处理 SCOPED 服务)

参数:

名称 类型 描述 默认
app FastAPI

FastAPI 应用实例

必需
container Container

容器实例

必需

引发:

类型 描述
ImportError

如果未安装 FastAPI

示例

from fastapi import FastAPI app = FastAPI() container = Container() setup_container(app, container)

源代码位于: src/symphra_container/integrations/fastapi.py
def setup_container(app: FastAPI, container: Container) -> None:
    """将容器绑定到 FastAPI 应用.

    此函数会:
    1. 将容器存储到全局变量中供 inject() 使用
    2. 配置生命周期管理(自动处理 SCOPED 服务)

    Args:
        app: FastAPI 应用实例
        container: 容器实例

    Raises:
        ImportError: 如果未安装 FastAPI

    示例:
        >>> from fastapi import FastAPI
        >>> app = FastAPI()
        >>> container = Container()
        >>> setup_container(app, container)
    """
    try:
        from fastapi import FastAPI
    except ImportError as e:
        raise ImportError("FastAPI is not installed. Install it with: pip install symphra-container[fastapi]") from e

    global _container, _lifespan_managed
    _container = container

    # 注册生命周期钩子管理 SCOPED 作用域
    if not _lifespan_managed:
        original_lifespan = app.router.lifespan_context

        async def managed_lifespan(app_instance: FastAPI):
            """管理请求作用域生命周期."""
            async with container:  # 进入容器上下文
                if original_lifespan:
                    async with original_lifespan(app_instance):
                        yield
                else:
                    yield

        app.router.lifespan_context = managed_lifespan
        _lifespan_managed = True