Skip to content

Commit 76dd65b

Browse files
committed
Clone options before modifying them in .NET Core & ASP.NET Core
1 parent 4776907 commit 76dd65b

2 files changed

Lines changed: 7 additions & 5 deletions

File tree

src/Hangfire.AspNetCore/HangfireApplicationBuilderExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ public static IApplicationBuilder UseHangfireServer(
7575
options ??= services.GetService<BackgroundJobServerOptions>() ?? new BackgroundJobServerOptions();
7676
additionalProcesses ??= services.GetServices<IBackgroundProcess>();
7777

78+
options = options.Clone(); // To modify options without causing possible side effects
7879
options.Activator ??= services.GetService<JobActivator>();
7980
options.FilterProvider ??= services.GetService<IJobFilterProvider>();
8081
options.TimeZoneResolver ??= services.GetService<ITimeZoneResolver>();

src/Hangfire.NetCore/HangfireServiceCollectionExtensions.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -245,12 +245,13 @@ private static BackgroundJobServerHostedService CreateBackgroundJobServerHostedS
245245
{
246246
ThrowIfNotConfigured(provider);
247247

248-
storage = storage ?? provider.GetService<JobStorage>() ?? JobStorage.Current;
249-
additionalProcesses = additionalProcesses ?? provider.GetServices<IBackgroundProcess>();
248+
storage ??= provider.GetService<JobStorage>() ?? JobStorage.Current;
249+
additionalProcesses ??= provider.GetServices<IBackgroundProcess>();
250250

251-
options.Activator = options.Activator ?? provider.GetService<JobActivator>();
252-
options.FilterProvider = options.FilterProvider ?? provider.GetService<IJobFilterProvider>();
253-
options.TimeZoneResolver = options.TimeZoneResolver ?? provider.GetService<ITimeZoneResolver>();
251+
options = options.Clone(); // To modify options without causing side effects
252+
options.Activator ??= provider.GetService<JobActivator>();
253+
options.FilterProvider ??= provider.GetService<IJobFilterProvider>();
254+
options.TimeZoneResolver ??= provider.GetService<ITimeZoneResolver>();
254255

255256
GetInternalServices(provider, out var factory, out var stateChanger, out var performer);
256257

0 commit comments

Comments
 (0)