<PackageReference Include="Castle.Windsor" Version="4.0.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; 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>(); private readonly object syncLock = new object(); public void AddChildContainerConfiguration(string key, IConfiguration config) { lock (syncLock) { childContainers[key] = config; } } public void AddComponentConfiguration(string key, IConfiguration config) { lock (syncLock) { components[key] = config; } } public void AddFacilityConfiguration(string key, IConfiguration config) { lock (syncLock) { facilities[key] = config; } } public void AddInstallerConfiguration(IConfiguration config) { lock (syncLock) { installers.Add(config); } } public IConfiguration GetChildContainerConfiguration(string key) { lock (syncLock) { childContainers.TryGetValue(key, out IConfiguration value); return value; } } public IConfiguration GetComponentConfiguration(string key) { lock (syncLock) { components.TryGetValue(key, out IConfiguration value); return value; } } public IConfiguration[] GetComponents() { lock (syncLock) { return components.Values.ToArray(); } } public IConfiguration[] GetConfigurationForChildContainers() { lock (syncLock) { return childContainers.Values.ToArray(); } } public IConfiguration[] GetFacilities() { lock (syncLock) { return facilities.Values.ToArray(); } } public IConfiguration GetFacilityConfiguration(string key) { lock (syncLock) { facilities.TryGetValue(key, out IConfiguration value); return value; } } public IConfiguration[] GetInstallers() { lock (syncLock) { return installers.ToArray(); } } public IResource GetResource(string resourceUri, IResource resource) { string value = "://"; if (resourceUri.IndexOf(value) == -1) return resource.CreateRelative(resourceUri); return ((IResourceSubSystem)base.Kernel.GetSubSystem(SubSystemConstants.ResourceKey)).CreateResource(resourceUri, resource.get_FileBasePath()); } public override void Terminate() { } } }