コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
        }