跳转至

打印依赖图(print_dependency_graph)

symphra_container.visualization.print_dependency_graph(container, key=None, indent=0)

打印依赖关系树.

参数:

名称 类型 描述 默认
container Container

容器实例

必需
key Any

服务键 (None 表示打印所有服务)

None
indent int

缩进级别 (内部使用)

0
Example

print_dependency_graph(container) UserService (Singleton) ├─ UserRepository (Scoped) │ └─ DatabaseContext (Singleton) └─ Logger (Singleton)

打印特定服务的依赖树

print_dependency_graph(container, UserService)

源代码位于: src/symphra_container/visualization.py
def print_dependency_graph(container: Container, key: Any = None, indent: int = 0) -> None:
    """打印依赖关系树.

    Args:
        container: 容器实例
        key: 服务键 (None 表示打印所有服务)
        indent: 缩进级别 (内部使用)

    Example:
        >>> print_dependency_graph(container)
        UserService (Singleton)
          ├─ UserRepository (Scoped)
          │  └─ DatabaseContext (Singleton)
          └─ Logger (Singleton)

        >>> # 打印特定服务的依赖树
        >>> print_dependency_graph(container, UserService)
    """
    if key is None:
        # 打印所有顶层服务
        for service_key in container._registrations:
            print_dependency_graph(container, service_key, 0)
            print()
        return

    registration = container._registrations.get(key)
    if not registration:
        print(f"{'  ' * indent}{_format_key(key)} (Not registered)")
        return

    # 使用枚举的 name 属性而不是类名
    lifetime = registration.lifetime.name
    key_name = _format_key(key)

    print(f"{'  ' * indent}{key_name} ({lifetime})")

    if registration.factory:
        dependencies = _extract_dependencies(registration.factory)
        for i, dep in enumerate(dependencies):
            is_last = i == len(dependencies) - 1
            prefix = "└─" if is_last else "├─"
            print(f"{'  ' * indent}{prefix} ", end="")
            print_dependency_graph(container, dep, indent + 1)