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