GitHub stars Context7 uv Ruff ty
modern-di is a python dependency injection framework which supports the following:
- Automatic dependency graph based on type annotations
- Also, explicit dependencies are allowed where needed
- Scopes and context management
- Python 3.10+ support
- Fully typed and tested
- Integrations with
aiogram,aiohttp,arq,Celery,FastAPI,FastStream,Flask,gRPC,Litestar,Starlette,taskiq, andTyper - Pytest integration (
modern-di-pytest) β turns any DI dependency into a pytest fixture
uv add modern-di # or: pip install modern-diimport dataclasses from modern_di import Container, Group, Scope, providers @dataclasses.dataclass(kw_only=True, slots=True, frozen=True) class Settings: database_url: str = "postgresql+asyncpg://localhost/app" @dataclasses.dataclass(kw_only=True, slots=True) class UserRepository: settings: Settings # auto-injected by type class Dependencies(Group): settings = providers.Factory(Settings, scope=Scope.APP) user_repository = providers.Factory(UserRepository, scope=Scope.REQUEST) with Container(groups=[Dependencies]) as container: with container.build_child_container(scope=Scope.REQUEST) as request: repo = request.resolve(UserRepository) print(repo.settings.database_url)
See the documentation for scopes, lifecycles, finalizers, and framework integrations. modern-di is deliberately conservative β see Design decisions for what it leaves out on purpose, including auto-binding, in-package integrations, and graph rendering.
Usage examples:
- with Litestar - litestar-sqlalchemy-template
- with FastAPI - fastapi-sqlalchemy-template
π Documentation
π¦ PyPI
π License
Browse the full list of templates and libraries in
modern-python β see the org profile for the categorized index.