Finalizes ConfigurationBuilder with indexer
This commit is contained in:
parent
1f675498a2
commit
6839cd82e2
5 changed files with 43 additions and 11 deletions
|
|
@ -23,7 +23,7 @@ namespace Core.Configurations
|
||||||
{
|
{
|
||||||
provider.Build();
|
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);
|
return new ConfigurationRoot(ConfigurationProviders);
|
||||||
}
|
}
|
||||||
|
|
@ -33,6 +33,14 @@ namespace Core.Configurations
|
||||||
{
|
{
|
||||||
List<IConfigurationProvider> _providers = [];
|
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]
|
public string this[string key]
|
||||||
{
|
{
|
||||||
get => GetConfiguration(_providers, key);
|
get => GetConfiguration(_providers, key);
|
||||||
|
|
@ -58,14 +66,10 @@ namespace Core.Configurations
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ConfigurationRoot : Configuration, IConfigurationRoot
|
public class ConfigurationRoot : Configuration, IConfigurationRoot
|
||||||
{
|
{
|
||||||
List<IConfigurationProvider> IConfiguration.ConfigurationProviders { get; set; }
|
|
||||||
|
|
||||||
public ConfigurationRoot(List<IConfigurationProvider> configurationProviders)
|
public ConfigurationRoot(List<IConfigurationProvider> configurationProviders)
|
||||||
{
|
{
|
||||||
((IConfiguration)this).ConfigurationProviders = configurationProviders;
|
((IConfiguration)this).ConfigurationProviders = configurationProviders;
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,13 @@ namespace Core.Configurations.SmartConfig
|
||||||
{
|
{
|
||||||
public static class SmartConfigExtension
|
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)
|
public static IConfigurationBuilder AddSmartConfig(this IConfigurationBuilder builder, string configKey = "DefaultConnection", string path = null)
|
||||||
{
|
{
|
||||||
return builder.AddProvider(new SmartConfigProvider(builder, configKey, path));
|
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())));
|
var pairs = configs.Select(x => new KeyValuePair<string, JToken>(x.Key, JToken.Parse(x.Value.ToString())));
|
||||||
|
|
||||||
_configuration = Common.KeyValueToJson.Convert(pairs);
|
_configuration = Common.KeyValueToJson.Convert(pairs);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Newtonsoft.Json.Linq.JObject Configuration()
|
public Newtonsoft.Json.Linq.JObject Configuration()
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ using Autofac;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
using Insight.Database;
|
using Insight.Database;
|
||||||
using Npgsql;
|
using Npgsql;
|
||||||
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||||
|
|
||||||
namespace Tests.ConfigurationTests
|
namespace Tests.ConfigurationTests
|
||||||
{
|
{
|
||||||
|
|
@ -52,7 +53,9 @@ namespace Tests.ConfigurationTests
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var actualFeature = builder.GetSection("Feature").ToObject<Feature>();
|
var actualFeature = builder.GetSection("Feature").ToObject<Feature>();
|
||||||
|
#pragma warning disable CS0618 // Type or member is obsolete
|
||||||
var actualFeatureObsoleted = builder.GetSection("Feature").Get<Feature>();
|
var actualFeatureObsoleted = builder.GetSection("Feature").Get<Feature>();
|
||||||
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
// Assert
|
// Assert
|
||||||
actualFeature.Should().BeEquivalentTo(expectedFeature);
|
actualFeature.Should().BeEquivalentTo(expectedFeature);
|
||||||
actualFeatureObsoleted.Should().BeEquivalentTo(expectedFeature);
|
actualFeatureObsoleted.Should().BeEquivalentTo(expectedFeature);
|
||||||
|
|
@ -74,6 +77,25 @@ namespace Tests.ConfigurationTests
|
||||||
// Assert
|
// Assert
|
||||||
actualFeature.Should().BeEquivalentTo(expectedFeature);
|
actualFeature.Should().BeEquivalentTo(expectedFeature);
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Testing a stupid indexer for compability with Microsoft ConfigurationBuilder
|
||||||
|
/// </summary>
|
||||||
|
[TestMethod]
|
||||||
|
public void Indexer_ShouldReturnValueAsString()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var expected = "SHA256";
|
||||||
|
|
||||||
|
var builder = new ConfigurationBuilder()
|
||||||
|
.AddJsonFile("appconfiguration.dev.json")
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var actual = builder["Authentication"];
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
actual.Should().BeEquivalentTo(expected);
|
||||||
|
}
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void Get_ShouldReturnCorrectValueAsInt()
|
public void Get_ShouldReturnCorrectValueAsInt()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ namespace Tests
|
||||||
{
|
{
|
||||||
CreateContainerBuilder();
|
CreateContainerBuilder();
|
||||||
Container = ContainerBuilder.Build();
|
Container = ContainerBuilder.Build();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -69,7 +69,7 @@ namespace Tests
|
||||||
.SingleInstance();
|
.SingleInstance();
|
||||||
|
|
||||||
|
|
||||||
builder.RegisterModule(new Core.ModuleRegistry.DbPostgreSqlModule
|
builder.RegisterModule(new Database.ModuleRegistry.DbPostgreSqlModule
|
||||||
{
|
{
|
||||||
ConnectionString = configuration.GetConnectionString("DefaultConnection")
|
ConnectionString = configuration.GetConnectionString("DefaultConnection")
|
||||||
});
|
});
|
||||||
|
|
@ -86,8 +86,6 @@ namespace Tests
|
||||||
[TestCleanup]
|
[TestCleanup]
|
||||||
public void CleanUp()
|
public void CleanUp()
|
||||||
{
|
{
|
||||||
//Serilog.Log.CloseAndFlush();
|
|
||||||
|
|
||||||
Trace.Flush();
|
Trace.Flush();
|
||||||
var telemetryClient = Container.Resolve<TelemetryClient>();
|
var telemetryClient = Container.Resolve<TelemetryClient>();
|
||||||
telemetryClient.Flush();
|
telemetryClient.Flush();
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
"ApplicationInsights": {
|
"ApplicationInsights": {
|
||||||
"ConnectionString": "InstrumentationKey=6d2e76ee-5343-4691-a5e3-81add43cb584;IngestionEndpoint=https://northeurope-0.in.applicationinsights.azure.com/"
|
"ConnectionString": "InstrumentationKey=6d2e76ee-5343-4691-a5e3-81add43cb584;IngestionEndpoint=https://northeurope-0.in.applicationinsights.azure.com/"
|
||||||
},
|
},
|
||||||
|
"Authentication": "SHA256",
|
||||||
"Feature": {
|
"Feature": {
|
||||||
"Enabled": true,
|
"Enabled": true,
|
||||||
"RolloutPercentage": 25,
|
"RolloutPercentage": 25,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue