diff --git a/docs/introduction/resolving.md b/docs/introduction/resolving.md index 988adabf..17da917a 100644 --- a/docs/introduction/resolving.md +++ b/docs/introduction/resolving.md @@ -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 diff --git a/packages/modern-di/modern_di/registries/providers_registry.py b/packages/modern-di/modern_di/registries/providers_registry.py index dab1d937..c4e8c438 100644 --- a/packages/modern-di/modern_di/registries/providers_registry.py +++ b/packages/modern-di/modern_di/registries/providers_registry.py @@ -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