Source code for pyzeta.framework.ioc.container_provider
"""
Module container_provider.py from the package PyZeta.
The static (global) ContainerProvider exposes the global container instance
valid for the current project instance. Every object that requires a container
and cannot obtain it from anywhere else should request it from here.
Authors:\n
- Philipp Schuette\n
"""
from typing import Optional, Type, TypeVar
from typing_extensions import ParamSpec
from pyzeta.framework.aop.aspect import Aspect
from pyzeta.framework.ioc.container import Container
S = TypeVar("S")
T = TypeVar("T")
P = ParamSpec("P")
[docs]
class ContainerProvider:
"Static folder providing a pre-built (during initialization) container."
_container: Optional[Container] = None
[docs]
@staticmethod
def getContainer() -> Container:
"Return the pre-built container instance."
if ContainerProvider._container is None:
raise ValueError("No pre-built container available right now!")
return ContainerProvider._container
[docs]
@staticmethod
def setContainer(container: Container) -> None:
"Register a pre-built container instance."
ContainerProvider._container = container
[docs]
@staticmethod
def registerAspectGlobally(
aspect: Aspect[S, T, P], serviceType: Type[S]
) -> None:
"Register an aspect for a type on the global container instance."
ContainerProvider.getContainer().registerAspect(aspect, serviceType)