2023-10-10 09:29:04 -04:00
|
|
|
from dataclasses import dataclass
|
|
|
|
from typing import Mapping, Type, TypeVar
|
|
|
|
|
|
|
|
T = TypeVar("T")
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
class ServiceContainer:
|
2023-10-10 09:36:30 -04:00
|
|
|
_dependencies: Mapping[str, T]
|
2023-10-10 09:29:04 -04:00
|
|
|
|
|
|
|
def register(self, name: str, instance: T) -> None:
|
|
|
|
self._dependencies[name] = instance
|
|
|
|
|
|
|
|
def retrieve(self, name: str, _: Type[T]) -> T:
|
|
|
|
return self._dependencies[name]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# in python 3.12 we can use retrieve[T] :)
|
|
|
|
# https://docs.python.org/3/reference/compound_stmts.html#type-params
|