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

DefaultComponentViewBuilder

using Castle.Core; using Castle.Core.Internal; using Castle.MicroKernel; using Castle.MicroKernel.Handlers; using Castle.Windsor.Diagnostics.DebuggerViews; using System; using System.Collections.Generic; using System.Text; namespace Castle.Windsor.Diagnostics.Helpers { public class DefaultComponentViewBuilder : IComponentDebuggerExtension { private readonly IHandler handler; public DefaultComponentViewBuilder(IHandler handler) { this.handler = handler; } public IEnumerable<object> Attach() { yield return (object)new DebuggerViewItem("Implementation", GetImplementation()); foreach (Type service in handler.ComponentModel.Services) { yield return (object)new DebuggerViewItem("Service", service); } yield return GetStatus(); yield return (object)new DebuggerViewItem("Lifestyle", handler.ComponentModel.GetLifestyleDescriptionLong()); if (HasInterceptors()) { InterceptorReference[] array = handler.ComponentModel.Interceptors.ToArray(); yield return (object)new DebuggerViewItem("Interceptors", "Count = " + array.Length, array); } yield return (object)new DebuggerViewItem("Name", handler.ComponentModel.Name); yield return (object)new DebuggerViewItem("Raw handler/component", handler); } private object GetImplementation() { Type implementation = handler.ComponentModel.Implementation; if ((object)implementation != typeof(LateBoundComponent)) return implementation; return LateBoundComponent.Instance; } private object GetStatus() { if (handler.CurrentState == HandlerState.Valid) return new DebuggerViewItem("Status", "All required dependencies can be resolved."); return new DebuggerViewItemWithDetails("Status", "This component may not resolve properly.", GetStatusDetails(handler as IExposeDependencyInfo), Array.Empty<object>()); } private string GetStatusDetails(IExposeDependencyInfo info) { StringBuilder stringBuilder = new StringBuilder("Some dependencies of this component could not be statically resolved."); if (info == null) return stringBuilder.ToString(); DependencyInspector dependencyInspector = new DependencyInspector(stringBuilder); info.ObtainDependencyDetails(dependencyInspector); return dependencyInspector.Message; } private bool HasInterceptors() { return handler.ComponentModel.HasInterceptors; } } }