跳转至

注册泛型(register_generic)

symphra_container.generics.register_generic(container, generic_type, implementation=None, factory=None, lifetime=None)

注册泛型服务.

支持区分不同类型参数的泛型服务。

参数:

名称 类型 描述 默认
container Container

容器实例

必需
generic_type Any

泛型类型,例如 Repository[User]

必需
implementation type | None

实现类(可选)

None
factory Any

工厂函数(可选)

None
lifetime Any

生命周期(可选)

None

引发:

类型 描述
ValueError

如果不是有效的泛型类型

示例

register_generic(container, Repository[User], UserRepository) register_generic(container, Repository[Order], OrderRepository) register_generic( ... container, ... Repository[Product], ... factory=lambda: ProductRepository() ... )

源代码位于: src/symphra_container/generics.py
def register_generic(
    container: Container,
    generic_type: Any,
    implementation: type | None = None,
    factory: Any = None,
    lifetime: Any = None,
) -> None:
    """注册泛型服务.

    支持区分不同类型参数的泛型服务。

    Args:
        container: 容器实例
        generic_type: 泛型类型,例如 Repository[User]
        implementation: 实现类(可选)
        factory: 工厂函数(可选)
        lifetime: 生命周期(可选)

    Raises:
        ValueError: 如果不是有效的泛型类型

    示例:
        >>> register_generic(container, Repository[User], UserRepository)
        >>> register_generic(container, Repository[Order], OrderRepository)
        >>> register_generic(
        ...     container,
        ...     Repository[Product],
        ...     factory=lambda: ProductRepository()
        ... )
    """
    from .types import Lifetime as LifetimeEnum

    generic_key = _extract_generic_info(generic_type)
    if generic_key is None:
        msg = f"Not a valid generic type: {generic_type}"
        raise ValueError(msg)

    # 使用 GenericKey 作为服务键
    if factory:
        container.register_factory(
            generic_key,  # type: ignore
            factory,
            lifetime=lifetime or LifetimeEnum.TRANSIENT,
        )
    elif implementation:
        container.register(
            implementation,
            key=generic_key,  # type: ignore
            lifetime=lifetime or LifetimeEnum.TRANSIENT,
        )
    else:
        msg = "Either implementation or factory must be provided"
        raise ValueError(msg)