README.md
June 30, 2026 ยท View on GitHub
Modern-DI integration for FastAPI.
Usage example: fastapi-sqlalchemy-template
Installation
uv add modern-di-fastapi # or: pip install modern-di-fastapi
Usage
setup_di registers the container and builds a per-request child container automatically; FromDI resolves a provider (or type) into a route parameter.
import dataclasses
import fastapi
from modern_di import Container, Group, Scope, providers
from modern_di_fastapi import FromDI, setup_di
@dataclasses.dataclass(kw_only=True)
class Settings:
debug: bool = True
@dataclasses.dataclass(kw_only=True)
class UserService:
settings: Settings # auto-injected by type
class Dependencies(Group):
settings = providers.Factory(scope=Scope.APP, creator=Settings)
user_service = providers.Factory(scope=Scope.REQUEST, creator=UserService)
app = fastapi.FastAPI()
container = Container(groups=[Dependencies], validate=True)
setup_di(app, container)
@app.get("/")
async def index(user_service: UserService = FromDI(Dependencies.user_service)) -> dict[str, bool]:
return {"debug": user_service.settings.debug}
The framework Request / WebSocket are resolvable within DI via the pre-built fastapi_request_provider / fastapi_websocket_provider context providers.
API
| Symbol | Description |
|---|---|
setup_di(app, container) | Stores the container on app.state and appends a lifespan that closes it on shutdown (merges with any existing lifespan=) |
FromDI(provider, *, use_cache=True) | FastAPI Depends that resolves a provider (or type) from the per-request child container |
fetch_di_container(app) | Returns the app-scoped container from app.state |
build_di_container(connection) | FastAPI Depends callable that yields the per-request child container โ REQUEST scope for an HTTP request, SESSION scope for a WebSocket |
fastapi_request_provider | ContextProvider for the current fastapi.Request |
fastapi_websocket_provider | ContextProvider for the current fastapi.WebSocket |
๐ฆ PyPI
๐ License
Part of modern-python
Built on modern-di, a dependency-injection framework with IoC container and scopes.
Browse the full list of templates and libraries in
modern-python โ see the org profile for the categorized index.