Skip to main content

Powerful dependency-injection framework with IoC container and scopes

Project description

modern-di

GitHub stars Context7 uv Ruff ty

Project Badges
modern-di Supported versions downloads
modern-di-fastapi Supported versions downloads
modern-di-faststream Supported versions downloads
modern-di-litestar Supported versions downloads
modern-di-typer Supported versions downloads
modern-di-pytest Supported versions downloads

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 FastAPI, FastStream, LiteStar and Typer
  • Pytest integration (modern-di-pytest) — turns any DI dependency into a pytest fixture

Install

uv add modern-di      # or: pip install modern-di

Quick Start

import 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(scope=Scope.APP, creator=Settings)
    user_repository = providers.Factory(scope=Scope.REQUEST, creator=UserRepository)


with Container(groups=[Dependencies], validate=True) 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.

Usage examples:

📚 Documentation

📦 PyPI

📝 License

Part of modern-python

Browse the full list of templates and libraries in modern-python — see the org profile for the categorized index.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

modern_di-2.19.2a1.tar.gz (19.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

modern_di-2.19.2a1-py3-none-any.whl (27.2 kB view details)

Uploaded Python 3

File details

Details for the file modern_di-2.19.2a1.tar.gz.

File metadata

  • Download URL: modern_di-2.19.2a1.tar.gz
  • Upload date:
  • Size: 19.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","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}

File hashes

Hashes for modern_di-2.19.2a1.tar.gz
Algorithm Hash digest
SHA256 ca30e67810fb72714c55661bf2860cbfb64a27cbf971048d793252378da0168f
MD5 7ac9f5a58167fbc330664a335160faef
BLAKE2b-256 806d090a7b699783fb9f0c5999494c3aaffa42103c5cf140a9799f8dd615227a

See more details on using hashes here.

File details

Details for the file modern_di-2.19.2a1-py3-none-any.whl.

File metadata

  • Download URL: modern_di-2.19.2a1-py3-none-any.whl
  • Upload date:
  • Size: 27.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","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}

File hashes

Hashes for modern_di-2.19.2a1-py3-none-any.whl
Algorithm Hash digest
SHA256 9c6e8f32f8894e23dd14924b81762408604c7e776cebdf8701e230a064363dd2
MD5 ae87ff07ab8ac6ba315075e7c62bcec9
BLAKE2b-256 4fdfcdb20e26ada448fc1f03f5edaa852addd4fb9de2fee31f2fa4c3f5221434

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page