@@ -25,8 +25,28 @@ namespace Hangfire
2525{
2626 public static class RecurringJob
2727 {
28- private static readonly Lazy < RecurringJobManager > Instance = new Lazy < RecurringJobManager > (
29- static ( ) => new RecurringJobManager ( ) , LazyThreadSafetyMode . PublicationOnly ) ;
28+ private static readonly Func < RecurringJobManager > DefaultFactory = static ( ) => new RecurringJobManager ( ) ;
29+ private static readonly object ManagerFactoryLock = new object ( ) ;
30+
31+ private static Func < RecurringJobManager > ? _managerFactory ;
32+
33+ internal static Func < RecurringJobManager > ManagerFactory
34+ {
35+ get
36+ {
37+ lock ( ManagerFactoryLock )
38+ {
39+ return _managerFactory ?? DefaultFactory ;
40+ }
41+ }
42+ set
43+ {
44+ lock ( ManagerFactoryLock )
45+ {
46+ _managerFactory = value ;
47+ }
48+ }
49+ }
3050
3151 [ Obsolete ( "Please use an overload with the explicit recurringJobId parameter and RecurringJobOptions instead. Will be removed in 2.0.0." ) ]
3252 public static void AddOrUpdate (
@@ -80,7 +100,7 @@ public static void AddOrUpdate(
80100 var job = Job . Create ( methodCall ) ;
81101 var id = GetRecurringJobId ( job ) ;
82102
83- Instance . Value . AddOrUpdate ( id , job , cronExpression , timeZone ?? TimeZoneInfo . Utc , queue ) ;
103+ ManagerFactory ( ) . AddOrUpdate ( id , job , cronExpression , timeZone ?? TimeZoneInfo . Utc , queue ) ;
84104 }
85105
86106 [ Obsolete ( "Please use an overload with the explicit recurringJobId parameter instead. Will be removed in 2.0.0." ) ]
@@ -92,7 +112,7 @@ public static void AddOrUpdate(
92112 var job = Job . Create ( methodCall ) ;
93113 var id = GetRecurringJobId ( job ) ;
94114
95- Instance . Value . AddOrUpdate ( id , job , cronExpression , options ) ;
115+ ManagerFactory ( ) . AddOrUpdate ( id , job , cronExpression , options ) ;
96116 }
97117
98118 [ Obsolete ( "Please use an overload with the explicit recurringJobId parameter and RecurringJobOptions instead. Will be removed in 2.0.0." ) ]
@@ -105,7 +125,7 @@ public static void AddOrUpdate<T>(
105125 var job = Job . Create ( methodCall ) ;
106126 var id = GetRecurringJobId ( job ) ;
107127
108- Instance . Value . AddOrUpdate ( id , job , cronExpression , timeZone ?? TimeZoneInfo . Utc , queue ) ;
128+ ManagerFactory ( ) . AddOrUpdate ( id , job , cronExpression , timeZone ?? TimeZoneInfo . Utc , queue ) ;
109129 }
110130
111131 [ Obsolete ( "Please use an overload with the explicit recurringJobId parameter instead. Will be removed in 2.0.0." ) ]
@@ -117,7 +137,7 @@ public static void AddOrUpdate<T>(
117137 var job = Job . Create ( methodCall ) ;
118138 var id = GetRecurringJobId ( job ) ;
119139
120- Instance . Value . AddOrUpdate ( id , job , cronExpression , options ) ;
140+ ManagerFactory ( ) . AddOrUpdate ( id , job , cronExpression , options ) ;
121141 }
122142
123143 [ Obsolete ( "Please use AddOrUpdate(string, Expression<Action>, Func<string>, RecurringJobOptions) instead. Will be removed in 2.0.0." ) ]
@@ -229,7 +249,7 @@ public static void AddOrUpdate(
229249 [ NotNull ] string queue = EnqueuedState . DefaultQueue )
230250 {
231251 var job = Job . Create ( methodCall ) ;
232- Instance . Value . AddOrUpdate ( recurringJobId , job , cronExpression , timeZone ?? TimeZoneInfo . Utc , queue ) ;
252+ ManagerFactory ( ) . AddOrUpdate ( recurringJobId , job , cronExpression , timeZone ?? TimeZoneInfo . Utc , queue ) ;
233253 }
234254
235255 public static void AddOrUpdate (
@@ -247,7 +267,7 @@ public static void AddOrUpdate(
247267 [ NotNull ] RecurringJobOptions options )
248268 {
249269 var job = Job . Create ( methodCall ) ;
250- Instance . Value . AddOrUpdate ( recurringJobId , job , cronExpression , options ) ;
270+ ManagerFactory ( ) . AddOrUpdate ( recurringJobId , job , cronExpression , options ) ;
251271 }
252272
253273 public static void AddOrUpdate (
@@ -269,7 +289,7 @@ public static void AddOrUpdate(
269289 if ( queue == null ) throw new ArgumentNullException ( nameof ( queue ) ) ;
270290
271291 var job = Job . Create ( methodCall , queue ) ;
272- Instance . Value . AddOrUpdate ( recurringJobId , job , cronExpression , options ) ;
292+ ManagerFactory ( ) . AddOrUpdate ( recurringJobId , job , cronExpression , options ) ;
273293 }
274294
275295 [ Obsolete ( "Please use AddOrUpdate<T>(string, Expression<Action<T>>, string, RecurringJobOptions) instead. Will be removed in 2.0.0." ) ]
@@ -281,7 +301,7 @@ public static void AddOrUpdate<T>(
281301 [ NotNull ] string queue = EnqueuedState . DefaultQueue )
282302 {
283303 var job = Job . Create ( methodCall ) ;
284- Instance . Value . AddOrUpdate ( recurringJobId , job , cronExpression , timeZone ?? TimeZoneInfo . Utc , queue ) ;
304+ ManagerFactory ( ) . AddOrUpdate ( recurringJobId , job , cronExpression , timeZone ?? TimeZoneInfo . Utc , queue ) ;
285305 }
286306
287307 public static void AddOrUpdate < T > (
@@ -299,7 +319,7 @@ public static void AddOrUpdate<T>(
299319 [ NotNull ] RecurringJobOptions options )
300320 {
301321 var job = Job . Create ( methodCall ) ;
302- Instance . Value . AddOrUpdate ( recurringJobId , job , cronExpression , options ) ;
322+ ManagerFactory ( ) . AddOrUpdate ( recurringJobId , job , cronExpression , options ) ;
303323 }
304324
305325 public static void AddOrUpdate < T > (
@@ -321,7 +341,7 @@ public static void AddOrUpdate<T>(
321341 if ( queue == null ) throw new ArgumentNullException ( nameof ( queue ) ) ;
322342
323343 var job = Job . Create ( methodCall , queue ) ;
324- Instance . Value . AddOrUpdate ( recurringJobId , job , cronExpression , options ) ;
344+ ManagerFactory ( ) . AddOrUpdate ( recurringJobId , job , cronExpression , options ) ;
325345 }
326346
327347 [ Obsolete ( "Please use an overload with the explicit recurringJobId parameter and RecurringJobOptions instead. Will be removed in 2.0.0." ) ]
@@ -376,7 +396,7 @@ public static void AddOrUpdate(
376396 var job = Job . Create ( methodCall ) ;
377397 var id = GetRecurringJobId ( job ) ;
378398
379- Instance . Value . AddOrUpdate ( id , job , cronExpression , timeZone ?? TimeZoneInfo . Utc , queue ) ;
399+ ManagerFactory ( ) . AddOrUpdate ( id , job , cronExpression , timeZone ?? TimeZoneInfo . Utc , queue ) ;
380400 }
381401
382402 [ Obsolete ( "Please use an overload with the explicit recurringJobId parameter instead. Will be removed in 2.0.0." ) ]
@@ -388,7 +408,7 @@ public static void AddOrUpdate(
388408 var job = Job . Create ( methodCall ) ;
389409 var id = GetRecurringJobId ( job ) ;
390410
391- Instance . Value . AddOrUpdate ( id , job , cronExpression , options ) ;
411+ ManagerFactory ( ) . AddOrUpdate ( id , job , cronExpression , options ) ;
392412 }
393413
394414 [ Obsolete ( "Please use an overload with the explicit recurringJobId parameter and RecurringJobOptions instead. Will be removed in 2.0.0." ) ]
@@ -401,7 +421,7 @@ public static void AddOrUpdate<T>(
401421 var job = Job . FromExpression ( methodCall ) ;
402422 var id = GetRecurringJobId ( job ) ;
403423
404- Instance . Value . AddOrUpdate ( id , job , cronExpression , timeZone ?? TimeZoneInfo . Utc , queue ) ;
424+ ManagerFactory ( ) . AddOrUpdate ( id , job , cronExpression , timeZone ?? TimeZoneInfo . Utc , queue ) ;
405425 }
406426
407427 [ Obsolete ( "Please use an overload with the explicit recurringJobId parameter instead. Will be removed in 2.0.0." ) ]
@@ -413,7 +433,7 @@ public static void AddOrUpdate<T>(
413433 var job = Job . FromExpression ( methodCall ) ;
414434 var id = GetRecurringJobId ( job ) ;
415435
416- Instance . Value . AddOrUpdate ( id , job , cronExpression , options ) ;
436+ ManagerFactory ( ) . AddOrUpdate ( id , job , cronExpression , options ) ;
417437 }
418438
419439 [ Obsolete ( "Please use AddOrUpdate(string, Expression<Func<Task>>, Func<string>, RecurringJobOptions) instead. Will be removed in 2.0.0." ) ]
@@ -525,7 +545,7 @@ public static void AddOrUpdate(
525545 [ NotNull ] string queue = EnqueuedState . DefaultQueue )
526546 {
527547 var job = Job . Create ( methodCall ) ;
528- Instance . Value . AddOrUpdate ( recurringJobId , job , cronExpression , timeZone ?? TimeZoneInfo . Utc , queue ) ;
548+ ManagerFactory ( ) . AddOrUpdate ( recurringJobId , job , cronExpression , timeZone ?? TimeZoneInfo . Utc , queue ) ;
529549 }
530550
531551 public static void AddOrUpdate (
@@ -543,7 +563,7 @@ public static void AddOrUpdate(
543563 [ NotNull ] RecurringJobOptions options )
544564 {
545565 var job = Job . Create ( methodCall ) ;
546- Instance . Value . AddOrUpdate ( recurringJobId , job , cronExpression , options ) ;
566+ ManagerFactory ( ) . AddOrUpdate ( recurringJobId , job , cronExpression , options ) ;
547567 }
548568
549569 public static void AddOrUpdate (
@@ -565,7 +585,7 @@ public static void AddOrUpdate(
565585 if ( queue == null ) throw new ArgumentNullException ( nameof ( queue ) ) ;
566586
567587 var job = Job . Create ( methodCall , queue ) ;
568- Instance . Value . AddOrUpdate ( recurringJobId , job , cronExpression , options ) ;
588+ ManagerFactory ( ) . AddOrUpdate ( recurringJobId , job , cronExpression , options ) ;
569589 }
570590
571591 [ Obsolete ( "Please use AddOrUpdate<T>(string, Expression<Func<T, Task>>, string, RecurringJobOptions) instead. Will be removed in 2.0.0." ) ]
@@ -577,7 +597,7 @@ public static void AddOrUpdate<T>(
577597 [ NotNull ] string queue = EnqueuedState . DefaultQueue )
578598 {
579599 var job = Job . FromExpression ( methodCall ) ;
580- Instance . Value . AddOrUpdate ( recurringJobId , job , cronExpression , timeZone ?? TimeZoneInfo . Utc , queue ) ;
600+ ManagerFactory ( ) . AddOrUpdate ( recurringJobId , job , cronExpression , timeZone ?? TimeZoneInfo . Utc , queue ) ;
581601 }
582602
583603 public static void AddOrUpdate < T > (
@@ -595,7 +615,7 @@ public static void AddOrUpdate<T>(
595615 [ NotNull ] RecurringJobOptions options )
596616 {
597617 var job = Job . Create ( methodCall ) ;
598- Instance . Value . AddOrUpdate ( recurringJobId , job , cronExpression , options ) ;
618+ ManagerFactory ( ) . AddOrUpdate ( recurringJobId , job , cronExpression , options ) ;
599619 }
600620
601621 public static void AddOrUpdate < T > (
@@ -617,24 +637,24 @@ public static void AddOrUpdate<T>(
617637 if ( queue == null ) throw new ArgumentNullException ( nameof ( queue ) ) ;
618638
619639 var job = Job . Create ( methodCall , queue ) ;
620- Instance . Value . AddOrUpdate ( recurringJobId , job , cronExpression , options ) ;
640+ ManagerFactory ( ) . AddOrUpdate ( recurringJobId , job , cronExpression , options ) ;
621641 }
622642
623643 public static void RemoveIfExists ( [ NotNull ] string recurringJobId )
624644 {
625- Instance . Value . RemoveIfExists ( recurringJobId ) ;
645+ ManagerFactory ( ) . RemoveIfExists ( recurringJobId ) ;
626646 }
627647
628648 [ Obsolete ( "Please use the TriggerJob method instead. Will be removed in 2.0.0." ) ]
629649 public static void Trigger ( [ NotNull ] string recurringJobId )
630650 {
631- Instance . Value . Trigger ( recurringJobId ) ;
651+ ManagerFactory ( ) . Trigger ( recurringJobId ) ;
632652 }
633653
634654 [ CanBeNull ]
635655 public static string ? TriggerJob ( [ NotNull ] string recurringJobId )
636656 {
637- return Instance . Value . TriggerJob ( recurringJobId ) ;
657+ return ManagerFactory ( ) . TriggerJob ( recurringJobId ) ;
638658 }
639659
640660 private static string GetRecurringJobId ( Job job )
0 commit comments