modern-di integration for FastAPI.
Full guide: FastAPI integration docs
Usage example: fastapi-sqlalchemy-template
Installation
uv add modern-di-fastapi # or: pip install modern-di-fastapi
Usage
setup_di stores the container on the app and opens and closes it with the app lifespan. FromDI resolves a provider (or type) into a route parameter. It builds the per-connection child container on demand through Depends(build_di_container), so only routes that use FromDI get one.
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])
setup_di(app, container)
container.validate() # optional fail-fast; must come after setup_di registers its providers
@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 composes the container's open/close into the app lifespan (nesting inside any existing lifespan=) |
FromDI(dependency, *, use_cache=True) |
FastAPI Depends that resolves a provider (or type) from the per-connection child container. Raises RuntimeError naming setup_di when a request reaches it without setup_di called |
fetch_di_container(app) |
Returns the app-scoped container from app.state. Raises RuntimeError naming setup_di when called without setup_di called |
build_di_container(connection) |
FastAPI Depends callable that yields the per-connection child container: REQUEST scope for an HTTP request, SESSION scope for a WebSocket |
fastapi_request_provider |
ContextProvider for the current fastapi.Request (REQUEST scope) |
fastapi_websocket_provider |
ContextProvider for the current fastapi.WebSocket (SESSION scope) |
📦 PyPI
📝 License
Part of modern-python
Built on modern-di, a dependency-injection framework with an IoC container and scopes.
Browse the full list of templates and libraries in
modern-python; the org profile has the categorized index.
Metadata
Release files for modern-di-fastapi 3.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| modern_di_fastapi-3.1.0.tar.gz | 4.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| modern_di_fastapi-3.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 9.9 kB
Release files / modern_di_fastapi-3.1.0.tar.gz
| Download URL | modern_di_fastapi-3.1.0.tar.gz |
|---|---|
| Size | 4.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ec0f0c5b0e979bf2033890848bbe16a8926086f1748e0f2749354ffd40a0b82a
|
|
BLAKE2b-256 checksum How to use checksums |
351af87295950344daab1ef74829ca0b6ec71da2cbd043477512e391bf5e971e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / modern_di_fastapi-3.1.0-py3-none-any.whl
| Download URL | modern_di_fastapi-3.1.0-py3-none-any.whl |
|---|---|
| Size | 5.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8fc8dfbb36535b86ba1e590f7629c9ab17e27dc660cfd79961fe21112c703a54
|
|
BLAKE2b-256 checksum How to use checksums |
9ddf7246c78a84b588bdae4d89aba0b8a4e22a9a4ea03fa0c3159f4b11cec53f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|