Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/introduction/resolving.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ One of the key features of `Modern-DI` since 2.x version is the automatic resolu
When a factory is created:
1. Modern-DI parses the creator's signature to identify parameter names and types
2. For each parameter with a type annotation, it searches for a registered provider that matches:
- First by parameter name (if provided)
- Then by parameter type (if name lookup fails)
- First by parameter type (if provided)
- Then by parameter name (if type lookup fails)
3. If a matching provider is found, it's automatically injected when the factory is resolved
4. If no matching provider is found and no default value is provided, an error is raised

Expand Down
6 changes: 3 additions & 3 deletions packages/modern-di/modern_di/registries/providers_registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ def __init__(self) -> None:
self._providers_by_type: dict[type, AbstractProvider[typing.Any]] = {}

def find_provider(
self, dependency_name: str | None = None, dependency_type: type[types.T_co] | None = None
self, *, dependency_name: str | None = None, dependency_type: type[types.T_co] | None = None
) -> AbstractProvider[types.T_co] | None:
if dependency_name and (provider := self._providers_by_name.get(dependency_name)):
if dependency_type and (provider := self._providers_by_type.get(dependency_type)):
return provider

if dependency_type and (provider := self._providers_by_type.get(dependency_type)):
if dependency_name and (provider := self._providers_by_name.get(dependency_name)):
return provider

return None
Expand Down