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

DuplicatedDependenciesDebuggerExtension

using Castle.Core; using Castle.Core.Internal; using Castle.MicroKernel; using Castle.Windsor.Diagnostics.DebuggerViews; using System; using System.Collections.Generic; using System.Linq; namespace Castle.Windsor.Diagnostics.Extensions { public class DuplicatedDependenciesDebuggerExtension : AbstractContainerDebuggerExtension { private const string name = "Components with potentially duplicated dependencies"; private DuplicatedDependenciesDiagnostic diagnostic; public static string Name => "Components with potentially duplicated dependencies"; public override IEnumerable<DebuggerViewItem> Attach() { Tuple<IHandler, DependencyDuplicate[]>[] array = diagnostic.Inspect(); if (array.Length == 0) return Enumerable.Empty<DebuggerViewItem>(); ComponentDebuggerView[] array2 = BuildItems(array); return new DebuggerViewItem[1] { new DebuggerViewItem("Components with potentially duplicated dependencies", "Count = " + array2.Length.ToString(), array2) }; } public override void Init(IKernel kernel, IDiagnosticsHost diagnosticsHost) { diagnostic = new DuplicatedDependenciesDiagnostic(kernel); diagnosticsHost.AddDiagnostic((IDuplicatedDependenciesDiagnostic)diagnostic); } private ComponentDebuggerView[] BuildItems(Tuple<IHandler, DependencyDuplicate[]>[] results) { return results.ConvertAll(ComponentWithDuplicateDependenciesView); } private ComponentDebuggerView ComponentWithDuplicateDependenciesView(Tuple<IHandler, DependencyDuplicate[]> input) { IHandler item = input.Item1; DependencyDuplicate[] item2 = input.Item2; DebuggerViewItemWithDetails[] array = item2.ConvertAll(MismatchView); Array.Sort(array, (DebuggerViewItemWithDetails c1, DebuggerViewItemWithDetails c2) => c1.Name.CompareTo(c2.Name)); string description = "Count = " + item2.Length.ToString(); object[] items = array; return ComponentDebuggerView.BuildRawFor(item, description, items); } private DebuggerViewItemWithDetails MismatchView(DependencyDuplicate input) { return new DebuggerViewItemWithDetails(Description(input.Dependency1), Description(input.Dependency2), diagnostic.GetDetails(input), Array.Empty<object>()); } private static string Description(DependencyModel dependencyModel) { return dependencyModel.TargetItemType.ToCSharpString() + " " + dependencyModel.DependencyKey; } } }