fastapi 依赖注入 类的成员依赖
时间: 2024-08-12 11:05:24 浏览: 109
FastAPI是一个轻量级的Web框架,它使用Python的Dependency Injection (DI) 来管理类间的依赖关系,这有助于保持代码整洁和松耦合。在FastAPI中,类的成员依赖通常通过构造函数传递或者使用`Depends`装饰器来声明。
当你有一个类需要访问其他服务、数据库连接、中间件等,可以将其作为类属性。在创建类实例时,你可以选择以下方式来注入这些依赖:
1. **构造函数**:
```python
class MyClass:
def __init__(self, service: ServiceClass = Depends(get_service)):
self.service = service
# 其他初始化操作...
```
这里,`get_service()`是一个工厂函数或装饰器,它返回所需的服务实例。
2. **使用Depends**装饰器**:
```python
from fastapi import Depends
@router.get("/items")
async def read_items(service: ServiceClass = Depends(get_service)):
return await service.retrieve_items()
```
这样,在每个视图函数或异步函数中,服务会自动注入到`service`参数上。
3. **使用Injection Scope**(如DBSession):
FastAPI允许你在应用级别设置依赖的作用域,比如请求级别的事务处理,可以这样注入:
```python
from fastapi import FastAPI, Depends, HTTPException
app = FastAPI()
@app.on_event("startup")
async def startup():
# 初始化并存储在全局变量中
app.state.db_session = create_db_session()
@app.get("/items", dependencies=[Depends(get_db)])
async def read_items(session=Depends(lambda: app.state.db_session)):
# session现在是在请求上下文中可用的
result = await fetch_items(session)
```
使用依赖注入的主要好处包括减少硬编码,提高代码复用性和测试友好性。
阅读全文