DefaultDiagnosticsSubSystem
public class DefaultDiagnosticsSubSystem : AbstractSubSystem, IDiagnosticsHost, IContainerDebuggerExtensionHost, IEnumerable<IContainerDebuggerExtension>, IEnumerable
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();
}
}
}