From b9b472652557b3c4e2e70474b09e917323330875 Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Tue, 7 Jul 2026 22:10:12 +0300 Subject: [PATCH] chore: adopt modern-di 2.25 integration seams Replace the providers_registry reach-in with container.add_providers, and the isinstance-on-AbstractProvider dispatch with container.resolve_dependency. Bump the modern-di floor to >=2.25.0,<3. --- architecture/dependency-resolution.md | 3 ++- modern_di_starlette/main.py | 11 ++--------- pyproject.toml | 2 +- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/architecture/dependency-resolution.md b/architecture/dependency-resolution.md index 105313a..d892bf2 100644 --- a/architecture/dependency-resolution.md +++ b/architecture/dependency-resolution.md @@ -14,7 +14,8 @@ uses an inert marker plus a decorator (the decorator path from modern-di's It returns `typing.cast(T, _FromDI(dependency))`: type checkers see the resolved type `T`, while at runtime it is a frozen `_FromDI` marker the decorator detects. The argument is a provider (`AbstractProvider`) or a bare type — resolution -handles both (`resolve_provider` vs `resolve`). +handles both via `Container.resolve_dependency`, modern-di's marker-dispatch +seam for integrations. ## @inject diff --git a/modern_di_starlette/main.py b/modern_di_starlette/main.py index 53f12e9..684d54f 100644 --- a/modern_di_starlette/main.py +++ b/modern_di_starlette/main.py @@ -85,7 +85,7 @@ async def __call__(self, scope: ASGIScope, receive: Receive, send: Send) -> None def setup_di(app: Starlette, container: Container) -> Container: app.state.di_container = container - container.providers_registry.add_providers(*_CONNECTION_PROVIDERS) + container.add_providers(*_CONNECTION_PROVIDERS) app.router.lifespan_context = _compose_lifespan(app.router.lifespan_context) app.add_middleware(_DIMiddleware, container=container) return container @@ -115,14 +115,7 @@ def _parse_inject_params(func: typing.Callable[..., typing.Any]) -> dict[str, _F def _resolve_di_params(container: Container, di_params: dict[str, _FromDI[typing.Any]]) -> dict[str, typing.Any]: - return { - name: ( - container.resolve_provider(marker.dependency) - if isinstance(marker.dependency, providers.AbstractProvider) - else container.resolve(dependency_type=marker.dependency) - ) - for name, marker in di_params.items() - } + return {name: container.resolve_dependency(marker.dependency) for name, marker in di_params.items()} def inject(func: typing.Callable[..., typing.Awaitable[T]]) -> typing.Callable[..., typing.Awaitable[T]]: diff --git a/pyproject.toml b/pyproject.toml index 3349cb4..217d2ae 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,7 +17,7 @@ classifiers = [ "Typing :: Typed", "Topic :: Software Development :: Libraries", ] -dependencies = ["starlette>=0.40,<2", "modern-di>=2.21.0,<3"] +dependencies = ["starlette>=0.40,<2", "modern-di>=2.25.0,<3"] version = "0" [project.urls]