public static AppOptions ReadFromConfiguration(IConfiguration config) { var options = new AppOptions(); options.BaseURL = config.GetValue <string>(nameof(options.BaseURL))?.TrimEnd('/'); options.InternalProjectId = config.GetValue(nameof(options.InternalProjectId), "54b56e480ef9605a88a13153"); options.ExceptionlessApiKey = config.GetValue <string>(nameof(options.ExceptionlessApiKey)); options.ExceptionlessServerUrl = config.GetValue <string>(nameof(options.ExceptionlessServerUrl)); options.AppMode = config.GetValue(nameof(options.AppMode), AppMode.Production); options.AppScope = config.GetValue(nameof(options.AppScope), options.AppMode.ToScope()); options.RunJobsInProcess = config.GetValue(nameof(options.RunJobsInProcess), options.AppMode == AppMode.Development); options.JobsIterationLimit = config.GetValue(nameof(options.JobsIterationLimit), -1); options.BotThrottleLimit = config.GetValue(nameof(options.BotThrottleLimit), 25).NormalizeValue(); options.ApiThrottleLimit = config.GetValue(nameof(options.ApiThrottleLimit), options.AppMode == AppMode.Development ? Int32.MaxValue : 3500).NormalizeValue(); options.EnableArchive = config.GetValue(nameof(options.EnableArchive), true); options.EnableSampleData = config.GetValue(nameof(options.EnableSampleData), options.AppMode != AppMode.Development); options.EventSubmissionDisabled = config.GetValue(nameof(options.EventSubmissionDisabled), false); options.DisabledPipelineActions = config.GetValueList(nameof(options.DisabledPipelineActions)); options.DisabledPlugins = config.GetValueList(nameof(options.DisabledPlugins)); options.MaximumEventPostSize = config.GetValue(nameof(options.MaximumEventPostSize), 200000).NormalizeValue(); options.MaximumRetentionDays = config.GetValue(nameof(options.MaximumRetentionDays), 180).NormalizeValue(); options.GoogleGeocodingApiKey = config.GetValue <string>(nameof(options.GoogleGeocodingApiKey)); options.MaxMindGeoIpKey = config.GetValue <string>(nameof(options.MaxMindGeoIpKey)); options.BulkBatchSize = config.GetValue(nameof(options.BulkBatchSize), 1000); options.EnableRepositoryNotifications = config.GetValue(nameof(options.EnableRepositoryNotifications), true); options.EnableWebSockets = config.GetValue(nameof(options.EnableWebSockets), true); try { var versionInfo = FileVersionInfo.GetVersionInfo(typeof(AppOptions).Assembly.Location); options.Version = versionInfo.FileVersion; options.InformationalVersion = versionInfo.ProductVersion; } catch { } options.CacheOptions = CacheOptions.ReadFromConfiguration(config, options); options.MessageBusOptions = MessageBusOptions.ReadFromConfiguration(config, options); options.MetricOptions = MetricOptions.ReadFromConfiguration(config); options.QueueOptions = QueueOptions.ReadFromConfiguration(config, options); options.StorageOptions = StorageOptions.ReadFromConfiguration(config, options); options.EmailOptions = EmailOptions.ReadFromConfiguration(config, options); options.ElasticsearchOptions = ElasticsearchOptions.ReadFromConfiguration(config, options); options.IntercomOptions = IntercomOptions.ReadFromConfiguration(config); options.SlackOptions = SlackOptions.ReadFromConfiguration(config); options.StripeOptions = StripeOptions.ReadFromConfiguration(config); options.AuthOptions = AuthOptions.ReadFromConfiguration(config); return(options); }