-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathproviders_registry.py
More file actions
27 lines (18 loc) · 945 Bytes
/
providers_registry.py
File metadata and controls
27 lines (18 loc) · 945 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import typing
from modern_di import errors, types
from modern_di.providers.abstract import AbstractProvider
class ProvidersRegistry:
__slots__ = ("_providers",)
def __init__(self) -> None:
self._providers: dict[type, AbstractProvider[typing.Any]] = {}
def find_provider(self, dependency_type: type[types.T]) -> AbstractProvider[types.T] | None:
return self._providers.get(dependency_type)
def register(self, provider_type: type, provider: AbstractProvider[typing.Any]) -> None:
if provider_type in self._providers:
raise RuntimeError(errors.PROVIDER_DUPLICATE_TYPE_ERROR.format(provider_type=provider_type))
self._providers[provider_type] = provider
def add_providers(self, *args: AbstractProvider[typing.Any]) -> None:
for provider in args:
if not provider.bound_type:
continue
self.register(provider.bound_type, provider)