ComponentDebuggerView
using Castle.MicroKernel;
using Castle.Windsor.Diagnostics.Helpers;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
namespace Castle.Windsor.Diagnostics.DebuggerViews
{
[DebuggerDisplay("{description,nq}", Name = "{name,nq}")]
public class ComponentDebuggerView
{
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private readonly string description;
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private readonly IComponentDebuggerExtension[] extension;
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private readonly string name;
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
public string Description {
get {
return description;
}
}
[DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
public object[] Extensions {
get {
return extension.SelectMany((IComponentDebuggerExtension e) => e.Attach()).ToArray();
}
}
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
public string Name {
get {
return name;
}
}
public ComponentDebuggerView(IHandler handler, string description, params IComponentDebuggerExtension[] defaultExtension)
{
name = handler.GetComponentName();
this.description = description;
extension = defaultExtension.Concat(GetExtensions(handler)).ToArray();
}
public static ComponentDebuggerView BuildFor(IHandler handler, string description = null)
{
List<IComponentDebuggerExtension> list = new List<IComponentDebuggerExtension> {
new DefaultComponentViewBuilder(handler)
};
list.AddRange(GetExtensions(handler));
return BuildRawFor(handler, description ?? handler.ComponentModel.GetLifestyleDescription(), list.ToArray());
}
public static ComponentDebuggerView BuildRawFor(IHandler handler, string description, IComponentDebuggerExtension[] extensions)
{
return new ComponentDebuggerView(handler, description, extensions);
}
public static ComponentDebuggerView BuildRawFor(IHandler handler, string description, object[] items)
{
return new ComponentDebuggerView(handler, description, new ComponentDebuggerExtension(items));
}
private static IEnumerable<IComponentDebuggerExtension> GetExtensions(IHandler handler)
{
return ((IEnumerable<IComponentDebuggerExtension>)handler.ComponentModel.ExtendedProperties["DebuggerExtensions"]) ?? Enumerable.Empty<IComponentDebuggerExtension>();
}
}
}