Spaces:
Paused
Paused
| """Core dependencies for dependency injection.""" | |
| from __future__ import annotations | |
| from typing import Any | |
| from hermes.config.settings import get_settings | |
| class Container: | |
| """Simple dependency injection container.""" | |
| def __init__(self) -> None: | |
| self._services: dict[str, Any] = {} | |
| self._singletons: dict[str, Any] = {} | |
| def register(self, name: str, service: Any, singleton: bool = False) -> None: | |
| """Register a service.""" | |
| if singleton: | |
| self._singletons[name] = service | |
| else: | |
| self._services[name] = service | |
| def resolve(self, name: str) -> Any: | |
| """Resolve a service by name.""" | |
| if name in self._singletons: | |
| return self._singletons[name] | |
| if name in self._services: | |
| return self._services[name] | |
| raise KeyError(f"Service '{name}' not registered") | |
| def has(self, name: str) -> bool: | |
| """Check if a service is registered.""" | |
| return name in self._services or name in self._singletons | |
| def clear(self) -> None: | |
| """Clear all registered services.""" | |
| self._services.clear() | |
| self._singletons.clear() | |
| _container: Container | None = None | |
| def get_container() -> Container: | |
| """Get the global container.""" | |
| global _container | |
| if _container is None: | |
| _container = Container() | |
| _container.register("settings", get_settings(), singleton=True) | |
| return _container | |
| def reset_container() -> None: | |
| """Reset the global container.""" | |
| global _container | |
| if _container is not None: | |
| _container.clear() | |
| _container = None | |