diff --git a/src/Ocelot/Configuration/Repository/DiskFileConfigurationRepository.cs b/src/Ocelot/Configuration/Repository/DiskFileConfigurationRepository.cs index 988292b94..864a82731 100644 --- a/src/Ocelot/Configuration/Repository/DiskFileConfigurationRepository.cs +++ b/src/Ocelot/Configuration/Repository/DiskFileConfigurationRepository.cs @@ -16,11 +16,10 @@ public class DiskFileConfigurationRepository : IFileConfigurationRepository private FileInfo _environmentFile; private readonly object _lock = new(); - public DiskFileConfigurationRepository(IWebHostEnvironment hosting, IOcelotConfigurationChangeTokenSource changeTokenSource) + public DiskFileConfigurationRepository(IWebHostEnvironment hostingEnvironment, IOcelotConfigurationChangeTokenSource changeTokenSource) { _hostingEnvironment = hostingEnvironment; _changeTokenSource = changeTokenSource; - _environmentFilePath = $"{AppContext.BaseDirectory}{ConfigurationFileName}{(string.IsNullOrEmpty(hosting.EnvironmentName) ? string.Empty : ".")}{hosting.EnvironmentName}.json"; Initialize(AppContext.BaseDirectory); } @@ -41,7 +40,6 @@ private void Initialize(string folder) _environmentFile = new FileInfo(Path.Combine(folder, envFile)); } - public Task> Get() public Task GetAsync() { string jsonConfiguration; diff --git a/src/Ocelot/DependencyInjection/ConfigurationBuilderExtensions.cs b/src/Ocelot/DependencyInjection/ConfigurationBuilderExtensions.cs index 909b57d57..818c83699 100644 --- a/src/Ocelot/DependencyInjection/ConfigurationBuilderExtensions.cs +++ b/src/Ocelot/DependencyInjection/ConfigurationBuilderExtensions.cs @@ -117,10 +117,11 @@ private static string GetMergedOcelotJson(string folder, IWebHostEnvironment env !fi.FullName.Equals(environmentFileInfo.FullName, StringComparison.OrdinalIgnoreCase)) .ToArray(); - dynamic fileConfiguration = new JObject(); - fileConfiguration.GlobalConfiguration = new JObject(); - fileConfiguration.Aggregates = new JArray(); - fileConfiguration.Routes = new JArray(); + dynamic fileConfigurationMerged = fileConfiguration != null ? JObject.FromObject(fileConfiguration) : new JObject(); + fileConfigurationMerged.GlobalConfiguration ??= new JObject(); + fileConfigurationMerged.Aggregates ??= new JArray(); + fileConfigurationMerged.Routes ??= new JArray(); + primaryFile ??= PrimaryConfigFile; globalFile ??= GlobalConfigFile; var primaryFileInfo = new FileInfo(primaryFile); @@ -136,13 +137,13 @@ private static string GetMergedOcelotJson(string folder, IWebHostEnvironment env var lines = File.ReadAllText(file.FullName); dynamic config = JToken.Parse(lines); - var isGlobal = file.Name.Equals(globalFileInfo.Name, StringComparison.OrdinalIgnoreCase) && + var isGlobal = file.Name.Equals(globalFileInfo.Name, StringComparison.OrdinalIgnoreCase) && file.FullName.Equals(globalFileInfo.FullName, StringComparison.OrdinalIgnoreCase); - MergeConfig(fileConfiguration, config, isGlobal); + MergeConfig(fileConfigurationMerged, config, isGlobal); } - return (JObject)fileConfiguration.ToString(); + return ((JObject)fileConfigurationMerged).ToString(); } public static IConfigurationBuilder AddOcelot(this IConfigurationBuilder builder, JObject fileConfiguration) @@ -163,10 +164,10 @@ public static IConfigurationBuilder AddOcelot(this IConfigurationBuilder builder string primaryConfigFile = null, bool? optional = null, bool? reloadOnChange = null) // optional injections => SerializeToFile(builder, fileConfiguration); - private static IConfigurationBuilder SerializeToFile(IConfigurationBuilder builder, object fileConfiguration) + private static IConfigurationBuilder SerializeToFile(IConfigurationBuilder builder, object fileConfiguration, bool? optional = null, bool? reloadOnChange = null) { var json = JsonConvert.SerializeObject(fileConfiguration, Formatting.Indented); - return AddOcelotJsonFile(builder, json, primaryConfigFile, optional, reloadOnChange); + return AddOcelotJsonFile(builder, json, PrimaryConfigFile, optional, reloadOnChange); } /// /// Adds Ocelot configuration by ready configuration object, environment and merge option, reading the required files from the current default folder.