推荐答案
在 FastAPI 中,可以通过将类作为依赖项注入到路由处理函数中。以下是一个简单的示例:
-- -------------------- ---- ------- ---- ------- ------ -------- ------- --- - --------- ----- ------------- --- -------------- ----- ----- --------- - ---- --- ------------ ------ -------- ------------- --- -------------------- --- - --------- ------ ------------------ ------------------ ----- --- ----------------- ------------ - ------------------------- ------ ----------- -------------------
在这个示例中,MyDependency
类被用作依赖项,并通过 get_dependency
函数进行实例化。Depends
用于将依赖项注入到路由处理函数 greet
中。
本题详细解读
1. 依赖项类的定义
首先,我们定义了一个类 MyDependency
,它有一个构造函数 __init__
和一个方法 greet
。这个类将作为依赖项被注入到路由处理函数中。
class MyDependency: def __init__(self, name: str): self.name = name def greet(self): return f"Hello, {self.name}!"
2. 依赖项工厂函数
接下来,我们定义了一个工厂函数 get_dependency
,它负责创建 MyDependency
的实例。这个函数可以接受参数(如 name
),并将这些参数传递给 MyDependency
的构造函数。
def get_dependency(name: str = "World"): return MyDependency(name)
3. 依赖项注入
在路由处理函数 greet
中,我们使用 Depends
将 get_dependency
函数返回的 MyDependency
实例注入到函数参数 dependency
中。
@app.get("/greet") async def greet(dependency: MyDependency = Depends(get_dependency)): return {"message": dependency.greet()}
4. 运行效果
当你访问 /greet
路由时,FastAPI 会自动调用 get_dependency
函数来创建 MyDependency
实例,并将其注入到 greet
函数中。最终,greet
函数会返回一个包含问候消息的 JSON 响应。
{ "message": "Hello, World!" }
5. 参数化依赖项
你还可以通过传递参数来定制依赖项的行为。例如,如果你访问 /greet?name=FastAPI
,那么 get_dependency
函数会接收到 name="FastAPI"
,并返回一个包含该名称的 MyDependency
实例。
{ "message": "Hello, FastAPI!" }
通过这种方式,你可以灵活地使用类作为依赖项,并根据需要传递参数来定制依赖项的行为。