FastAPI:dependency_overrides 不会覆盖 @app.on_event 中的依赖关系

Gun*_*ald 6 python dependency-injection fastapi

FastAPI我面临着和的问题Depends
下面的代码片段包含两个dependency_overrides语句,一个在 a 中,@app.get另一个在@app.on_event. 当第一个测试运行时,另一个测试失败:

from fastapi import Depends, FastAPI
from fastapi.testclient import TestClient

app = FastAPI()
values = {}


def startup_parameters():
    return {
        "foo": None,
        "bar": None
    }

def update_parameters():
    return {
        "foo": 1,
        "bar": 2
    }

def override_parameters():
    return {
        "foo": 5,
        "bar": 10
    }


@app.on_event("startup")
async def on_startup(commons: dict = Depends(startup_parameters)) -> None:
    global values
    values = commons

@app.get("/update/")
async def set_items(commons: dict = Depends(update_parameters)) -> None:
    global values
    values = commons

@app.get("/items/")
async def read_items():
    return values

# Test runs
def test_update_override():
    with TestClient(app) as client:
        app.dependency_overrides[update_parameters] = override_parameters
        client.get("/update/")
        response = client.get("/items/")
        assert response.json() == {
            "foo": 5,
            "bar": 10,
        }

# Test fails
def test_startup_override():
    with TestClient(app) as client:
        app.dependency_overrides[startup_parameters] = override_parameters
        response = client.get("/items/")
        assert response.json() == {
            "foo": 5,
            "bar": 10,
        }
Run Code Online (Sandbox Code Playgroud)

查看 FAST-API 文档(https://fastapi.tiangolo.com/advanced/advanced-dependency/),在我看来,依赖注入是针对路由实现的,而不是针对事件实现的。但也许有一个解决方法。

提前非常感谢...