如何基于CLI参数实现FastAPI的依赖注入
实现FastAPI路由中基于CLI参数的依赖注入
要让Consort依赖注入类使用启动时传入的CLI参数a、b、c,可以通过以下方式调整代码:
核心思路
- 将CLI参数存入FastAPI应用的全局状态(
app.state),让依赖类能访问到这些启动时参数 - 调整依赖注入逻辑,通过依赖函数实例化
Consort,从全局状态中获取所需参数 - 修正路由定义的缺失问题(原代码未定义
router实例)
修改后的完整代码
import sys import charles, william, george, elizabeth from fastapi import FastAPI, Depends, Request from fastapi.routing import APIRouter def arg_parse(args): # 替换为实际的CLI参数解析逻辑,此处为示例返回值 return "cli_param_a", "cli_param_b", "cli_param_c" class Consort: def __init__(self, a, b, c): self.x = a_stuff(a) self.y = b_stuff(b) self.z = c_stuff(c) # 模拟业务处理函数,替换为你的实际逻辑 def a_stuff(val): return f"processed_{val}" def b_stuff(val): return f"processed_{val}" def c_stuff(val): return f"processed_{val}" class King: def __init__(self, app: FastAPI, a, b, c): self.a = a self.b = b self.c = c self.router = APIRouter() # 绑定路由到实例方法 self.router.post("/create")(self.create) self.router.post("/read")(self.read) self.router.post("/update")(self.update) self.router.post("/delete")(self.delete) # 将路由注册到FastAPI应用 app.include_router(self.router) # 定义依赖函数,从全局状态获取参数实例化Consort def get_consort(self, request: Request): return Consort(request.app.state.a, request.app.state.b, request.app.state.c) async def create(self, consort=Depends(get_consort)): return charles.create() async def read(self, consort=Depends(get_consort)): return william.read() async def update(self, consort=Depends(get_consort)): return george.update() async def delete(self, consort=Depends(get_consort)): return elizabeth.delete() def main(args): a, b, c = arg_parse(args) app = FastAPI() # 将CLI参数存入应用全局状态 app.state.a = a app.state.b = b app.state.c = c # 初始化King类并注册路由 service = King(app, a, b, c) # 启动uvicorn服务 import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000) if __name__ == "__main__": main(sys.argv)
关键说明
- 全局状态存储:在
main函数中把解析后的a、b、c存入app.state,确保整个应用生命周期内都能访问到这些启动参数 - 依赖注入逻辑:通过
get_consort依赖函数,从request.app.state中取出CLI参数,实例化Consort并注入到路由方法中 - 路由注册:在
King类初始化时创建APIRouter,绑定实例方法后注册到FastAPI应用,解决原代码中router未定义的问题
内容的提问来源于stack exchange,提问作者Henry Thornton
相关产品推荐
相关产品推荐

