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

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> components = new Dictionary<string, IConfiguration>(); private readonly IDictionary<string, IConfiguration> facilities = new Dictionary<string, IConfiguration>(); private readonly ICollection<IConfiguration> installers = new List<IConfiguration>(); [MethodImpl(MethodImplOptions.Synchronized)] public void AddChildContainerConfiguration(string key, IConfiguration config) { childContainers[key] = config; } [MethodImpl(MethodImplOptions.Synchronized)] public void AddComponentConfiguration(string key, IConfiguration config) { components[key] = config; } [MethodImpl(MethodImplOptions.Synchronized)] public void AddFacilityConfiguration(string key, IConfiguration config) { facilities[key] = config; } [MethodImpl(MethodImplOptions.Synchronized)] public void AddInstallerConfiguration(IConfiguration config) { installers.Add(config); } [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[] GetComponents() { return components.Values.ToArray(); } [MethodImpl(MethodImplOptions.Synchronized)] public IConfiguration[] GetConfigurationForChildContainers() { return childContainers.Values.ToArray(); } [MethodImpl(MethodImplOptions.Synchronized)] public IConfiguration[] GetFacilities() { return facilities.Values.ToArray(); } [MethodImpl(MethodImplOptions.Synchronized)] public IConfiguration GetFacilityConfiguration(string key) { facilities.TryGetValue(key, out IConfiguration value); return value; } [MethodImpl(MethodImplOptions.Synchronized)] public IConfiguration[] GetInstallers() { return installers.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()); } public override void Terminate() { } } }