{"record":{"id":"2004328c25c00f15","repo":"HangfireIO/Hangfire","slug":"configuration-200432","errorCode":null,"errorMessage":"configuration","messagePattern":"configuration","errorType":"validation","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"src/Hangfire.SqlServer/SqlServerStorageExtensions.cs","lineNumber":33,"sourceCode":"\nusing System;\nusing System.Data.Common;\nusing System.Threading;\nusing Hangfire.Annotations;\nusing Hangfire.SqlServer;\n\n// ReSharper disable once CheckNamespace\nnamespace Hangfire\n{\n    public static class SqlServerStorageExtensions\n    {\n        private static int _metricsInitialized;\n\n        public static IGlobalConfiguration<SqlServerStorage> UseSqlServerStorage(\n            [NotNull] this IGlobalConfiguration configuration,\n            [NotNull] string nameOrConnectionString)\n        {\n            if (configuration == null) throw new ArgumentNullException(nameof(configuration));\n            if (nameOrConnectionString == null) throw new ArgumentNullException(nameof(nameOrConnectionString));\n\n            var storage = new SqlServerStorage(nameOrConnectionString);\n            return configuration.UseStorage(storage).UseSqlServerStorageCommonMetrics();\n        }\n\n        public static IGlobalConfiguration<SqlServerStorage> UseSqlServerStorage(\n            [NotNull] this IGlobalConfiguration configuration,\n            [NotNull] string nameOrConnectionString, \n            [NotNull] SqlServerStorageOptions options)\n        {\n            if (configuration == null) throw new ArgumentNullException(nameof(configuration));\n            if (nameOrConnectionString == null) throw new ArgumentNullException(nameof(nameOrConnectionString));\n            if (options == null) throw new ArgumentNullException(nameof(options));\n\n            var storage = new SqlServerStorage(nameOrConnectionString, options);\n            return configuration.UseStorage(storage).UseSqlServerStorageCommonMetrics();\n        }","sourceCodeStart":15,"sourceCodeEnd":51,"githubUrl":"https://github.com/HangfireIO/Hangfire/blob/c236dd0f930f831ec151e436e138ddc429a02a72/src/Hangfire.SqlServer/SqlServerStorageExtensions.cs#L15-L51","documentation":"The UseSqlServerStorage(this IGlobalConfiguration, string) extension method received a null configuration argument. This is a standard ArgumentNullException guard; configuration is the 'this' parameter of the extension method, so calling it on null is the cause.","triggerScenarios":"Calling null.UseSqlServerStorage(nameOrConnectionString) where the IGlobalConfiguration instance is null; chaining UseSqlServerStorage before GlobalConfiguration.Configuration is assigned.","commonSituations":"Calling configuration extensions before var config = GlobalConfiguration.Configuration; in startup code ordering mistakes; refactoring that removes the configuration variable.","solutions":["Ensure you start the fluent chain from GlobalConfiguration.Configuration (Hangfire's static entry point).","Verify the configuration variable is non-null before chaining.","Follow the documented startup pattern: GlobalConfiguration.Configuration.UseSqlServerStorage(...)."],"exampleFix":"// before\nIGlobalConfiguration config = null;\nconfig.UseSqlServerStorage(\"HangfireDB\");\n// after\nGlobalConfiguration.Configuration\n    .UseSqlServerStorage(\"HangfireDB\")\n    .UseConsole();","handlingStrategy":"validation","validationCode":"var config = GlobalConfiguration.Configuration; // ensure non-null entry point\nif (config == null)\n    throw new InvalidOperationException(\"GlobalConfiguration.Configuration is not initialized.\");\n\nconfig.UseSqlServerStorage(nameOrConnectionString);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always start the configuration chain from GlobalConfiguration.Configuration.","Do not store IGlobalConfiguration in a variable that may be null; chain directly.","Place UseSqlServerStorage early in your application startup sequence."],"tags":["argument-null","extension-method","configuration","setup"],"backgroundTag":null,"analyzedSha":"c236dd0f930f831ec151e436e138ddc429a02a72","analyzedAt":"2026-08-13T20:27:11.027Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}