You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI集成Strawberry GraphQL上下文时依赖注入未生效问题

依赖未正常解析的核心原因

一共两点:

  • 第一处是Depends语法使用错误:FastAPI的Depends()需要传入依赖函数的引用对象,不能传入函数执行后的返回值。你写的Depends(get_current_user())会在代码加载阶段就直接执行get_current_user(),完全违背Depends延迟执行、由框架注入参数的设计逻辑。
  • 第二处是最根本的逻辑问题:GraphQLRouter的context_getter是Strawberry组件内部维护的回调函数,请求到达时由Strawberry直接调用,不会经过FastAPI的依赖注入处理流程。FastAPI的依赖注入机制只会扫描、解析自身路由表中注册的视图函数参数,对第三方组件内部持有的回调函数无感知,自然不会识别你写在get_context参数里的Depends标记,参数无值时就会返回inspect._empty这个参数缺省占位对象。
正确实现方案

context_getter被调用时会自动接收当前请求的Request对象作为入参,你可以直接在函数内部手动执行依赖逻辑:

from fastapi import Request
from strawberry.fastapi import GraphQLRouter

async def get_context(request: Request):
    # 手动传入依赖所需的request对象,执行鉴权逻辑
    user = await get_current_user(request)
    log.info(user)
    return {"user": user, "request": request}

graphql_app = GraphQLRouter(schema, graphiql=True, context_getter=get_context)

如果依赖层级较复杂、不想手动维护参数传递,可以调用FastAPI内置的依赖解析工具手动触发解析,注意不同FastAPI版本的API参数可能存在小幅差异。

补充说明:普通路由能正常使用依赖,是因为路由函数直接注册到了FastAPI的路由系统中,框架启动时就完成了依赖扫描和注入逻辑的构建,和context_getter的执行链路完全不同。

内容的提问来源于stack exchange,提问作者MWood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 17:03:33