using System; using System.Collections.Generic; using System.Linq; namespace VContainer.Diagnostics { public static class DiagnositcsContext { static readonly Dictionary collectors = new Dictionary(); public static event Action OnContainerBuilt; public static DiagnosticsCollector GetCollector(string name) { lock (collectors) { if (!collectors.TryGetValue(name, out var collector)) { collector = new DiagnosticsCollector(name); collectors.Add(name, collector); } return collector; } } public static ILookup GetGroupedDiagnosticsInfos() { lock (collectors) { return collectors .SelectMany(x => x.Value.GetDiagnosticsInfos()) .Where(x => x.ResolveInfo.MaxDepth <= 1) .ToLookup(x => x.ScopeName); } } public static IEnumerable GetDiagnosticsInfos() { lock (collectors) { return collectors.SelectMany(x => x.Value.GetDiagnosticsInfos()); } } public static void NotifyContainerBuilt(IObjectResolver container) { OnContainerBuilt?.Invoke(container); } internal static DiagnosticsInfo FindByRegistration(Registration registration) { return GetDiagnosticsInfos().FirstOrDefault(x => x.ResolveInfo.Registration == registration); } public static void RemoveCollector(string name) { lock (collectors) { collectors.Remove(name); } } } }