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

DefaultDiagnosticsSubSystem

using Castle.Core.Internal; using Castle.MicroKernel; using Castle.Windsor.Diagnostics.Extensions; using System; using System.Collections; using System.Collections.Generic; using System.Linq; namespace Castle.Windsor.Diagnostics { public class DefaultDiagnosticsSubSystem : AbstractSubSystem, IDiagnosticsHost, IContainerDebuggerExtensionHost, IEnumerable<IContainerDebuggerExtension>, IEnumerable { private readonly IDictionary<Type, IDiagnostic<object>> diagnostics = new Dictionary<Type, IDiagnostic<object>>(); private readonly IList<IContainerDebuggerExtension> extensions = new List<IContainerDebuggerExtension>(); public override void Terminate() { diagnostics.Values.OfType<IDisposable>().ForEach(delegate(IDisposable e) { e.Dispose(); }); } public void AddDiagnostic<TDiagnostic>(TDiagnostic diagnostic) where TDiagnostic : IDiagnostic<object> { diagnostics.Add(typeof(TDiagnostic), (IDiagnostic<object>)(object)diagnostic); } public TDiagnostic GetDiagnostic<TDiagnostic>() where TDiagnostic : IDiagnostic<object> { diagnostics.TryGetValue(typeof(TDiagnostic), out IDiagnostic<object> value); return (TDiagnostic)value; } public override void Init(IKernelInternal kernel) { base.Init(kernel); InitStandardExtensions(); } public void Add(IContainerDebuggerExtension item) { item.Init(base.Kernel, this); extensions.Add(item); } public IEnumerator<IContainerDebuggerExtension> GetEnumerator() { return extensions.GetEnumerator(); } protected virtual void InitStandardExtensions() { Add(new AllComponents()); Add(new AllServices()); Add(new PotentiallyMisconfiguredComponents()); Add(new PotentialLifestyleMismatches()); Add(new DuplicatedDependenciesDebuggerExtension()); Add(new UsingContainerAsServiceLocator()); Add(new ReleasePolicyTrackedObjects()); Add(new Castle.Windsor.Diagnostics.Extensions.Facilities()); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } }