65 lines
1.9 KiB
C#
65 lines
1.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace VContainer.Diagnostics
|
|
{
|
|
public static class DiagnositcsContext
|
|
{
|
|
static readonly Dictionary<string, DiagnosticsCollector> collectors
|
|
= new Dictionary<string, DiagnosticsCollector>();
|
|
|
|
public static event Action<IObjectResolver> 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<string, DiagnosticsInfo> GetGroupedDiagnosticsInfos()
|
|
{
|
|
lock (collectors)
|
|
{
|
|
return collectors
|
|
.SelectMany(x => x.Value.GetDiagnosticsInfos())
|
|
.Where(x => x.ResolveInfo.MaxDepth <= 1)
|
|
.ToLookup(x => x.ScopeName);
|
|
}
|
|
}
|
|
|
|
public static IEnumerable<DiagnosticsInfo> 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);
|
|
}
|
|
}
|
|
}
|
|
}
|