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()
{
}
}
}