Finalizes ConfigurationBuilder with indexer

This commit is contained in:
Janus C. H. Knudsen 2025-02-11 19:34:45 +01:00
parent 1f675498a2
commit 6839cd82e2
5 changed files with 43 additions and 11 deletions

View file

@ -23,7 +23,7 @@ namespace Core.Configurations
{
provider.Build();
}
//TODO: we need to come up with merge strategy
//TODO: we need to come up with merge strategy, right now the latest key-path dominates
return new ConfigurationRoot(ConfigurationProviders);
}
@ -33,6 +33,14 @@ namespace Core.Configurations
{
List<IConfigurationProvider> _providers = [];
/// <summary>
/// Implements a string-based indexer for backwards compatibility with Microsoft.Extensions.Configuration.
/// This implementation is marked as obsolete and should be replaced with type-safe alternatives.
/// </summary>
/// <param name="key">The configuration key to retrieve.</param>
/// <returns>The configuration value for the specified key.</returns>
/// <exception cref="NotSupportedException">Thrown when attempting to set a value, as this operation is not supported.</exception>
[Obsolete("Use type-safe configuration methods instead")]
public string this[string key]
{
get => GetConfiguration(_providers, key);
@ -58,14 +66,10 @@ namespace Core.Configurations
return value;
}
}
public class ConfigurationRoot : Configuration, IConfigurationRoot
{
List<IConfigurationProvider> IConfiguration.ConfigurationProviders { get; set; }
public ConfigurationRoot(List<IConfigurationProvider> configurationProviders)
{
((IConfiguration)this).ConfigurationProviders = configurationProviders;

View file

@ -8,6 +8,13 @@ namespace Core.Configurations.SmartConfig
{
public static class SmartConfigExtension
{
/// <summary>
///
/// </summary>
/// <param name="builder"></param>
/// <param name="configKey">Name of key</param>
/// <param name="path">If this is different than the default ConnectionStrings-element, then configure it.</param>
/// <returns></returns>
public static IConfigurationBuilder AddSmartConfig(this IConfigurationBuilder builder, string configKey = "DefaultConnection", string path = null)
{
return builder.AddProvider(new SmartConfigProvider(builder, configKey, path));
@ -83,7 +90,7 @@ namespace Core.Configurations.SmartConfig
var pairs = configs.Select(x => new KeyValuePair<string, JToken>(x.Key, JToken.Parse(x.Value.ToString())));
_configuration = Common.KeyValueToJson.Convert(pairs);
}
public Newtonsoft.Json.Linq.JObject Configuration()