#nullable enable using System; using System.Collections.Generic; namespace ShrinkContext { public enum ShrinkFiberDiagnosticStatus { Inactive = 0, Waiting = 1, Loading = 2, Active = 3, Unloading = 4, Failed = 5, Retired = 6, } /// 单个依赖键在快照时刻的解析、提交与潜在提供者。 public sealed class ShrinkDependencyDiagnostic { public ShrinkDependencyDiagnostic(string key, string realm, long? currentProviderUid, long? committedProviderUid, IReadOnlyList potentialProviderUids) { Key = key; Realm = realm; CurrentProviderUid = currentProviderUid; CommittedProviderUid = committedProviderUid; PotentialProviderUids = potentialProviderUids; } public string Key { get; } public string Realm { get; } public long? CurrentProviderUid { get; } public long? CommittedProviderUid { get; } public IReadOnlyList PotentialProviderUids { get; } public bool IsSatisfied => CurrentProviderUid.HasValue; } /// 一个 fiber 的稳定只读诊断投影,不暴露可变运行时对象。 public sealed class ShrinkFiberDiagnostic { public ShrinkFiberDiagnostic(long uid, string name, ShrinkFiberDiagnosticStatus status, ShrinkFiberState lifecycleState, bool retired, bool inTransition, IReadOnlyList inject, IReadOnlyList provide, IReadOnlyList targetProviderUids, IReadOnlyList dependencies, IReadOnlyList interceptKeys, string? errorType, string? errorMessage) { Uid = uid; Name = name; Status = status; LifecycleState = lifecycleState; Retired = retired; InTransition = inTransition; Inject = inject; Provide = provide; TargetProviderUids = targetProviderUids; Dependencies = dependencies; InterceptKeys = interceptKeys; ErrorType = errorType; ErrorMessage = errorMessage; } public long Uid { get; } public string Name { get; } public ShrinkFiberDiagnosticStatus Status { get; } public ShrinkFiberState LifecycleState { get; } public bool Retired { get; } public bool InTransition { get; } public IReadOnlyList Inject { get; } public IReadOnlyList Provide { get; } public IReadOnlyList TargetProviderUids { get; } public IReadOnlyList Dependencies { get; } public IReadOnlyList InterceptKeys { get; } public string? ErrorType { get; } public string? ErrorMessage { get; } } public sealed class ShrinkNotificationDiagnostic { public ShrinkNotificationDiagnostic(long dispatchCount, long candidateVisitCount, int lastCandidateCount, int indexedKeyCount) { DispatchCount = dispatchCount; CandidateVisitCount = candidateVisitCount; LastCandidateCount = lastCandidateCount; IndexedKeyCount = indexedKeyCount; } public long DispatchCount { get; } public long CandidateVisitCount { get; } public int LastCandidateCount { get; } public int IndexedKeyCount { get; } } /// 运行时整体快照:fiber、绑定与 notify 索引状态。 public sealed class ShrinkContextRuntimeDiagnostic { public ShrinkContextRuntimeDiagnostic(IReadOnlyList fibers, int bindingCount, ShrinkNotificationDiagnostic notifications) { Fibers = fibers; BindingCount = bindingCount; Notifications = notifications; } public IReadOnlyList Fibers { get; } public int BindingCount { get; } public ShrinkNotificationDiagnostic Notifications { get; } } }