Source code for hdmi.types.definitions
from typing import Type, Callable, Any, Awaitable
[docs]
class ServiceDefinition:
"""Describes everything to know about a service.
Service lifetime is defined by two boolean flags:
- scoped: False (default) = available from Container, True = requires ScopedContainer
- transient: False (default) = cached, True = new instance per request
Four service types:
1. Singleton (scoped=False, transient=False): cached in Container
2. Scoped (scoped=True, transient=False): cached in ScopedContainer
3. Transient (scoped=False, transient=True): not cached, no scope required
4. Scoped Transient (scoped=True, transient=True): not cached, requires scope
"""
def __init__(
self,
service_type: Type,
/,
*,
scoped: bool = False,
transient: bool = False,
name: str | None = None,
factory: Callable[..., Any] | Callable[..., Awaitable[Any]] | None = None,
autowire: bool = True,
initializer: Callable[[Any], None] | Callable[[Any], Awaitable[None]] | None = None,
finalizer: Callable[[Any], None] | Callable[[Any], Awaitable[None]] | None = None,
):
if factory is not None and not callable(factory):
raise ValueError("factory must be callable")
if initializer is not None and not callable(initializer):
raise ValueError("initializer must be callable")
if finalizer is not None and not callable(finalizer):
raise ValueError("finalizer must be callable")
self.service_type = service_type
self.scoped = scoped
self.transient = transient
self.name = name
self.factory = factory
self.autowire = autowire
self.initializer = initializer
self.finalizer = finalizer