跳转至

解析调试(debug_resolution)

symphra_container.visualization.debug_resolution(container, key)

调试服务解析过程.

打印详细的解析步骤和依赖信息, 帮助诊断问题。

参数:

名称 类型 描述 默认
container Container

容器实例

必需
key Any

要调试的服务键

必需
Example

debug_resolution(container, UserService) 🔍 Resolving: UserService ✅ Registration found: UserService (Singleton) 📦 Dependencies: - UserRepository (registered: ✅) - Logger (registered: ✅) 🎯 Resolution order: 1. Logger 2. UserRepository 3. UserService ✅ Resolution successful

源代码位于: src/symphra_container/visualization.py
def debug_resolution(container: Container, key: Any) -> None:
    """调试服务解析过程.

    打印详细的解析步骤和依赖信息, 帮助诊断问题。

    Args:
        container: 容器实例
        key: 要调试的服务键

    Example:
        >>> debug_resolution(container, UserService)
        🔍 Resolving: UserService
        ✅ Registration found: UserService (Singleton)
        📦 Dependencies:
          - UserRepository (registered: ✅)
          - Logger (registered: ✅)
        🎯 Resolution order:
          1. Logger
          2. UserRepository
          3. UserService
        ✅ Resolution successful
    """
    print(f"🔍 Resolving: {_format_key(key)}")

    registration = container._registrations.get(key)
    if not registration:
        print(f"❌ Service not registered: {_format_key(key)}")
        return

    lifetime = registration.lifetime.name
    print(f"✅ Registration found: {_format_key(key)} ({lifetime})")

    if registration.factory:
        dependencies = _extract_dependencies(registration.factory)
        if dependencies:
            print("📦 Dependencies:")
            for dep in dependencies:
                is_registered = dep in container._registrations
                status = "✅" if is_registered else "❌"
                print(f"  {status} {_format_key(dep)}")

            print("\n🎯 Resolution order:")
            order = _resolve_order(container, key)
            for i, service in enumerate(order, 1):
                print(f"  {i}. {_format_key(service)}")
        else:
            print("📦 No dependencies")
    else:
        print("📦 No factory (instance registration)")

    # 尝试实际解析
    try:
        instance = container.resolve(key)
        print(f"\n✅ Resolution successful: {type(instance).__name__}")
    except Exception as e:
        print(f"\n❌ Resolution failed: {e}")