-
Notifications
You must be signed in to change notification settings - Fork 13
Description
Hello,
I have asp.net application (.NET 8).
I have regular application's appsettings.json file in it.
I try to read from the remote server some configuration sections which are stored as JSON and to add them to the ConfigurarationManager.
So i created some extension method which i call in Program.cs :
public static void LoadConfiguration(this IConfigurationBuilder configBuilder)
{
var configFilePath = @"appsettings2.json";
if (File.Exists(configFilePath))
{
var fileContent = File.ReadAllText(configFilePath);
using var stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(fileContent));
configBuilder.AddJsonStream(stream);
}
configBuilder.AddEnvironmentVariables();
**configBuilder.EnableSubstitutions("$(", ")");**
}
For this example i just read the json string from another file.
When i run my application i get an exception in the last line with EnableSubstitutions.
As you can see i call EnableSubstitutions in the end when i finished building my configuration.
Exception message is "StreamConfigurationProviders cannot be loaded more than once."
The stack trace of the exception :
at Microsoft.Extensions.Configuration.StreamConfigurationProvider.Load()
at Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 providers)
at ConfigurationSubstitution.ChainedSubstitutedConfigurationRoot.<>c__DisplayClass1_0.<.ctor>b__0()
at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy`1.CreateValue()
at ConfigurationSubstitution.ChainedSubstitutedConfigurationRoot.GetReloadToken()
at ConfigurationSubstitution.ChainedSubstitutedConfigurationProvider.GetReloadToken()
at Microsoft.Extensions.Primitives.ChangeToken.ChangeTokenRegistration`1..ctor(Func`1 changeTokenProducer, Action`1 changeTokenConsumer, TState state)
at Microsoft.Extensions.Primitives.ChangeToken.OnChange(Func`1 changeTokenProducer, Action changeTokenConsumer)
at Microsoft.Extensions.Configuration.ConfigurationManager.AddSource(IConfigurationSource source)
at Microsoft.Extensions.Configuration.ConfigurationManager.Microsoft.Extensions.Configuration.IConfigurationBuilder.Add(IConfigurationSource source)
at ConfigurationSubstitution.IConfigurationBuilderExtensions.EnableSubstitutions(IConfigurationBuilder builder, ConfigurationSubstitutor substitutor)
at ConfigurationSubstitution.IConfigurationBuilderExtensions.EnableSubstitutions(IConfigurationBuilder builder, String substitutableStartsWith, String substitutableEndsWith, UnresolvedVariableBehaviour unresolvedVariableBehaviour)
at System.LoadConfigurationExtension.LoadConfiguration(IConfigurationBuilder configBuilder) in C:\GIT\WebApplicationConfSubstitute\LoadConfigurationExtension.cs:line 22
at Program.<Main>$(String[] args) in C:\GIT\WebApplicationConfSubstitute\Program.cs:line 3
I would appreciate for any help to understand what i did wrong and what is a way to do what i want or it's a bug?
Thank you.
@molinch @a-alamoudi @regnrat @MickaJsd