public static void Apply([NotNull] ISettingsNode content, [NotNull] ClusterConfigClientSettings settings) { if (TryGet <bool>(content, nameof(ClusterConfigClientSettings.EnableLocalSettings), "enableLocalSettings", bool.TryParse, out var enableLocalSettings)) { settings.EnableLocalSettings = enableLocalSettings; } if (TryGet <bool>(content, nameof(ClusterConfigClientSettings.EnableClusterSettings), "enableClusterSettings", bool.TryParse, out var enableClusterSettings)) { settings.EnableClusterSettings = enableClusterSettings; } if (TryGet <TimeSpan>(content, nameof(ClusterConfigClientSettings.UpdatePeriod), "refreshPeriod", TimeSpan.TryParse, out var updatePeriod)) { settings.UpdatePeriod = updatePeriod; } if (TryGet <TimeSpan>(content, nameof(ClusterConfigClientSettings.RequestTimeout), "requestTimeout", TimeSpan.TryParse, out var requestTimeout)) { settings.RequestTimeout = requestTimeout; } if (TryGet(content, nameof(ClusterConfigClientSettings.Zone), "clusterSettingsZoneName", out var zone)) { settings.Zone = zone; } if (TryGet(content, nameof(ClusterConfigClientSettings.LocalFolder), "localSettingsDirectory", out var localFolder)) { settings.LocalFolder = localFolder; } if (TryGet(content, "clusterConfigHost", out var dnsEndpoint)) { var parts = dnsEndpoint.Split(':'); if (parts.Length == 2 && !string.IsNullOrEmpty(parts[0]) && int.TryParse(parts[1], out var port)) { settings.Cluster = new DnsClusterProvider(parts[0], port); } } else { var foundDns = TryGet(content, "ServerDNS", out var dns); var foundPort = TryGet(content, "ServerPort", int.TryParse, out int port); if (foundDns || foundPort) { settings.Cluster = new DnsClusterProvider( dns ?? ClusterConfigClientDefaults.Dns, port == default ? ClusterConfigClientDefaults.Port : port); } } }
public void Should_preserve_non_default_values_from_user_settings() { foreach (var(propertyName, nonDefaultValue, _) in EnumerateNonDefaultValues()) { var baseSettings = new ClusterConfigClientSettings(); var userSettings = new ClusterConfigClientSettings(); typeof(ClusterConfigClientSettings).GetProperty(propertyName).SetValue(userSettings, nonDefaultValue); var mergedSettings = ConfigurationMerger.Merge(baseSettings, userSettings); typeof(ClusterConfigClientSettings).GetProperty(propertyName).GetValue(mergedSettings).Should().Be(nonDefaultValue); } }
public static ClusterConfigClientSettings Merge( [NotNull] ClusterConfigClientSettings baseSettings, [NotNull] ClusterConfigClientSettings userSettings) { var result = new ClusterConfigClientSettings(); foreach (var property in typeof(ClusterConfigClientSettings).GetProperties(BindingFlags.Instance | BindingFlags.Public)) { var baseValue = property.GetValue(baseSettings); var userValue = property.GetValue(userSettings); var defaultValue = property.GetValue(DefaultSettings); property.SetValue(result, Select(baseValue, userValue, defaultValue)); } return(result); }