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

DefaultConfigurationStore

This implementation of IConfigurationStore does not try to obtain an external configuration by any means. Its only purpose is to serve as a base class for subclasses that might obtain the configuration node from anywhere.
using Castle.Core.Configuration; using Castle.Core.Resource; using Castle.MicroKernel.SubSystems.Resource; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; namespace Castle.MicroKernel.SubSystems.Configuration { [Serializable] public class DefaultConfigurationStore : AbstractSubSystem, IConfigurationStore, ISubSystem { private readonly IDictionary<string, IConfiguration> childContainers = new Dictionary<string, IConfiguration>(); private readonly IDictionary<string, IConfiguration> facilities = new Dictionary<string, IConfiguration>(); private readonly IDictionary<string, IConfiguration> components = new Dictionary<string, IConfiguration>(); private readonly IDictionary<string, IConfiguration> bootstrapcomponents = new Dictionary<string, IConfiguration>(); private readonly ICollection<IConfiguration> installers = new List<IConfiguration>(); public override void Init(IKernel kernel) { base.Init(kernel); base.Kernel.ComponentUnregistered += CleanUpComponentConfiguration; } private void CleanUpComponentConfiguration(string key, IHandler handler) { if (key != null && !components.Remove(key)) bootstrapcomponents.Remove(key); } public override void Terminate() { base.Kernel.ComponentUnregistered -= CleanUpComponentConfiguration; } [MethodImpl(MethodImplOptions.Synchronized)] public void AddFacilityConfiguration(string key, IConfiguration config) { facilities[key] = config; } [MethodImpl(MethodImplOptions.Synchronized)] public void AddComponentConfiguration(string key, IConfiguration config) { components[key] = config; } [MethodImpl(MethodImplOptions.Synchronized)] public void AddBootstrapComponentConfiguration(string key, IConfiguration config) { throw new NotImplementedException(); } [MethodImpl(MethodImplOptions.Synchronized)] public void AddChildContainerConfiguration(string key, IConfiguration config) { childContainers[key] = config; } [MethodImpl(MethodImplOptions.Synchronized)] public void AddInstallerConfiguration(IConfiguration config) { installers.Add(config); } [MethodImpl(MethodImplOptions.Synchronized)] public IConfiguration GetFacilityConfiguration(string key) { facilities.TryGetValue(key, out IConfiguration value); return value; } [MethodImpl(MethodImplOptions.Synchronized)] public IConfiguration GetChildContainerConfiguration(string key) { childContainers.TryGetValue(key, out IConfiguration value); return value; } [MethodImpl(MethodImplOptions.Synchronized)] public IConfiguration GetComponentConfiguration(string key) { components.TryGetValue(key, out IConfiguration value); return value; } [MethodImpl(MethodImplOptions.Synchronized)] public IConfiguration GetBootstrapComponentConfiguration(string key) { bootstrapcomponents.TryGetValue(key, out IConfiguration value); return value; } [MethodImpl(MethodImplOptions.Synchronized)] public IConfiguration[] GetFacilities() { return facilities.Values.ToArray(); } [MethodImpl(MethodImplOptions.Synchronized)] public IConfiguration[] GetInstallers() { return installers.ToArray(); } [MethodImpl(MethodImplOptions.Synchronized)] public IConfiguration[] GetBootstrapComponents() { return bootstrapcomponents.Values.ToArray(); } [MethodImpl(MethodImplOptions.Synchronized)] public IConfiguration[] GetConfigurationForChildContainers() { return childContainers.Values.ToArray(); } [MethodImpl(MethodImplOptions.Synchronized)] public IConfiguration[] GetComponents() { return components.Values.ToArray(); } public IResource GetResource(string resourceUri, IResource resource) { if (resourceUri.IndexOf(Uri.SchemeDelimiter) == -1) return resource.CreateRelative(resourceUri); IResourceSubSystem resourceSubSystem = (IResourceSubSystem)base.Kernel.GetSubSystem(SubSystemConstants.ResourceKey); return resourceSubSystem.CreateResource(resourceUri, resource.get_FileBasePath()); } } }