<PackageReference Include="Castle.Windsor" Version="5.1.2" />

ReleasePolicyTrackedObjects

using Castle.MicroKernel; using Castle.Windsor.Diagnostics.DebuggerViews; using Castle.Windsor.Diagnostics.Helpers; using System.Collections.Generic; using System.Linq; namespace Castle.Windsor.Diagnostics.Extensions { public class ReleasePolicyTrackedObjects : AbstractContainerDebuggerExtension { private const string name = "Objects tracked by release policy"; private TrackedComponentsDiagnostic diagnostic; public static string Name => "Objects tracked by release policy"; public override IEnumerable<DebuggerViewItem> Attach() { ILookup<IHandler, object> lookup = diagnostic.Inspect(); if (lookup == null) return new DebuggerViewItem[0]; DebuggerViewItem debuggerViewItem = BuildItem(lookup); if (debuggerViewItem != null) return new DebuggerViewItem[1] { debuggerViewItem }; return new DebuggerViewItem[0]; } public override void Init(IKernel kernel, IDiagnosticsHost diagnosticsHost) { diagnostic = new TrackedComponentsDiagnostic(); diagnosticsHost.AddDiagnostic((ITrackedComponentsDiagnostic)diagnostic); } private DebuggerViewItem BuildItem(ILookup<IHandler, object> results) { int num = 0; List<DebuggerViewItem> list = new List<DebuggerViewItem>(); foreach (IGrouping<IHandler, object> item2 in from l in results orderby l.Key.ComponentModel.Name select l) { IHandler key = item2.Key; object[] array = item2.ToArray(); num += array.Length; ComponentDebuggerView componentDebuggerView = ComponentDebuggerView.BuildFor(key, null); DebuggerViewItem item = new DebuggerViewItem(key.GetComponentName(), "Count = " + array.Length.ToString(), new MasterDetailsDebuggerViewItem(componentDebuggerView, componentDebuggerView.Description, "Component", array)); list.Add(item); } list.Sort((DebuggerViewItem f, DebuggerViewItem s) => f.Name.CompareTo(s.Name)); return new DebuggerViewItem("Objects tracked by release policy", "Count = " + num.ToString(), list.ToArray()); } } }