Python FastAPI:dependency_覆盖不会覆盖@app.on_事件中的依赖项

Python FastAPI:dependency_覆盖不会覆盖@app.on_事件中的依赖项,python,dependency-injection,fastapi,Python,Dependency Injection,Fastapi,我面临FastAPI和依赖的问题 下面的代码段包含两个dependency\u overrides语句,一个在@app.get中,另一个在@app.on\u事件中。当第一个测试运行到另一个测试失败时: from fastapi import Depends, FastAPI from fastapi.testclient import TestClient app = FastAPI() values = {} def startup_parameters(): return {

我面临
FastAPI
依赖的问题

下面的代码段包含两个
dependency\u overrides
语句,一个在
@app.get
中,另一个在
@app.on\u事件中。当第一个测试运行到另一个测试失败时:

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,
        }
查看FAST-API文档()在我看来,依赖注入是针对路由而不是事件实现的。 但也许有一个解决办法


提前非常感谢…

您可以使用基于
设置/环境的方法,根据给定的环境(prod/test)加载不同的值,如下所述: