Skip to content

Commit 9356df3

Browse files
authored
Merge pull request #252 from NCronJob-Dev/ntk/dyn
Drop DynamicJobRegistration
2 parents c876c2d + 34e3d4a commit 9356df3

File tree

5 files changed

+32
-38
lines changed

5 files changed

+32
-38
lines changed

src/NCronJob/Configuration/DynamicJobRegistration.cs

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/NCronJob/Execution/JobExecutor.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections.Immutable;
2+
using System.Diagnostics;
23
using Microsoft.Extensions.DependencyInjection;
34
using Microsoft.Extensions.Hosting;
45
using Microsoft.Extensions.Logging;
@@ -30,7 +31,7 @@ public JobExecutor(
3031
this.retryHandler = retryHandler;
3132
this.jobQueueManager = jobQueueManager;
3233
this.jobRegistry = jobRegistry;
33-
this.exceptionHandlers = [..exceptionHandlers];
34+
this.exceptionHandlers = [.. exceptionHandlers];
3435

3536
lifetime.ApplicationStopping.Register(OnApplicationStopping);
3637
}
@@ -79,18 +80,17 @@ public async Task RunJob(JobRun run, CancellationToken stoppingToken)
7980

8081
private IJob ResolveJob(IServiceProvider scopedServiceProvider, JobDefinition definition)
8182
{
82-
if (!definition.IsTypedJob)
83-
return jobRegistry.GetDynamicJobInstance(scopedServiceProvider, definition);
84-
85-
var job = scopedServiceProvider.GetService(definition.Type);
83+
var job = definition.ResolveJob(scopedServiceProvider);
8684
if (job != null)
87-
return (IJob)job;
85+
{
86+
return job;
87+
}
8888

89-
LogUnregisteredJob(definition.Name);
89+
Debug.Assert(definition.IsTypedJob);
9090

91-
job = ActivatorUtilities.CreateInstance(scopedServiceProvider, definition.Type);
91+
LogUnregisteredJob(definition.Name);
9292

93-
return (IJob)job;
93+
return (IJob)ActivatorUtilities.CreateInstance(scopedServiceProvider, definition.Type);
9494
}
9595

9696
public void Dispose()

src/NCronJob/Registry/JobDefinition.cs

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,15 @@ private JobDefinition(
2222

2323
private JobDefinition(
2424
string? customName,
25-
string dynamicHash,
26-
JobExecutionAttributes jobPolicyMetadata)
25+
Delegate jobDelegate)
2726
{
2827
CustomName = customName;
2928

29+
Delegate = jobDelegate;
3030
IsTypedJob = false;
31-
JobFullName = $"Untyped job {typeof(DynamicJobFactory).Namespace}.{dynamicHash}";
31+
JobFullName = $"Untyped job {typeof(DynamicJobFactory).Namespace}.{DynamicJobNameGenerator.GenerateJobName(jobDelegate)}";
3232

33-
JobPolicyMetadata = jobPolicyMetadata;
33+
JobPolicyMetadata = new JobExecutionAttributes(jobDelegate);
3434
}
3535

3636
public string Name => CustomName is not null ? $"{CustomName} ({JobFullName})" : JobFullName;
@@ -72,11 +72,11 @@ private JobDefinition(
7272
public SupportsConcurrencyAttribute? ConcurrencyPolicy => JobPolicyMetadata.ConcurrencyPolicy;
7373

7474
[MemberNotNullWhen(true, nameof(Type))]
75+
[MemberNotNullWhen(false, nameof(Delegate))]
7576
public bool IsTypedJob { get; }
7677

77-
private bool IsDisabled => CronExpression == NotReacheableCronDefinition;
78-
79-
public bool IsEnabled => CronExpression is null || !IsDisabled;
78+
public bool IsEnabled => CronExpression is null
79+
|| CronExpression != NotReacheableCronDefinition;
8080

8181
public static JobDefinition CreateTyped(
8282
Type type,
@@ -101,9 +101,8 @@ public static JobDefinition CreateTyped(
101101

102102
public static JobDefinition CreateUntyped(
103103
string? name,
104-
string dynamicHash,
105-
JobExecutionAttributes jobPolicyMetadata)
106-
=> new(name, dynamicHash, jobPolicyMetadata);
104+
Delegate jobDelegate)
105+
=> new(name, jobDelegate);
107106

108107
public void Disable()
109108
{
@@ -164,6 +163,18 @@ public void UpdateWith(JobOption? jobOption)
164163
}
165164
}
166165

166+
public IJob? ResolveJob(IServiceProvider scopedServiceProvider)
167+
{
168+
if (IsTypedJob)
169+
{
170+
return (IJob?)scopedServiceProvider.GetService(Type);
171+
}
172+
173+
return new DynamicJobFactory(scopedServiceProvider, Delegate);
174+
}
175+
176+
private Delegate? Delegate { get; }
177+
167178
private static CronExpression GetCronExpression(string expression)
168179
{
169180
var precisionRequired = DetermineAndValidatePrecision(expression);

src/NCronJob/Registry/JobRegistry.cs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace NCronJob;
55
internal sealed class JobRegistry
66
{
77
private readonly List<JobDefinition> allJobs = [];
8-
public List<DynamicJobRegistration> DynamicJobRegistrations { get; } = [];
8+
99
private readonly Dictionary<JobDefinition, List<DependentJobRegistryEntry>> dependentJobsPerJobDefinition
1010
= new(DependentJobDefinitionEqualityComparer.Instance);
1111

@@ -62,22 +62,15 @@ public JobDefinition AddDynamicJob(
6262
string? jobName = null,
6363
JobOption? jobOption = null)
6464
{
65-
var jobPolicyMetadata = new JobExecutionAttributes(jobDelegate);
6665

67-
var entry = JobDefinition.CreateUntyped(jobName, DynamicJobNameGenerator.GenerateJobName(jobDelegate), jobPolicyMetadata);
66+
var entry = JobDefinition.CreateUntyped(jobName, jobDelegate);
6867
entry.UpdateWith(jobOption);
6968

7069
Add(entry);
71-
AddDynamicJobRegistration(entry, jobDelegate);
7270

7371
return entry;
7472
}
7573

76-
public IJob GetDynamicJobInstance(IServiceProvider serviceProvider, JobDefinition jobDefinition)
77-
=> DynamicJobRegistrations
78-
.Single(d => d.JobDefinition.JobFullName == jobDefinition.JobFullName)
79-
.DynamicJobFactoryResolver(serviceProvider);
80-
8174
public void RegisterJobDependency(IReadOnlyCollection<JobDefinition> parentJobdefinitions, DependentJobRegistryEntry entry)
8275
{
8376
foreach (var jobDefinition in parentJobdefinitions)
@@ -98,9 +91,6 @@ public IReadOnlyCollection<JobDefinition> GetDependentSuccessJobTypes(JobDefinit
9891
public IReadOnlyCollection<JobDefinition> GetDependentFaultedJobTypes(JobDefinition parentJobDefinition)
9992
=> FilterByAndProject(parentJobDefinition, v => v.SelectMany(p => p.RunWhenFaulted));
10093

101-
private void AddDynamicJobRegistration(JobDefinition jobDefinition, Delegate jobDelegate)
102-
=> DynamicJobRegistrations.Add(new DynamicJobRegistration(jobDefinition, sp => new DynamicJobFactory(sp, jobDelegate)));
103-
10494
public static void UpdateJobDefinitionsToRunAtStartup(
10595
IReadOnlyCollection<JobDefinition> jobDefinitions,
10696
bool shouldCrashOnFailure = false)

src/NCronJob/Registry/RuntimeJobRegistry.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,10 +192,6 @@ public bool TryRegister(Action<IRuntimeJobBuilder> jobBuilder, [NotNullWhen(fals
192192
jobQueueManager.SignalJobQueue(jobDefinition.JobFullName);
193193
}
194194

195-
foreach (var entry in jobRegistry.DynamicJobRegistrations)
196-
{
197-
jobQueueManager.SignalJobQueue(entry.JobDefinition.JobFullName);
198-
}
199195
exception = null;
200196
return true;
201197
}

0 commit comments

Comments
 (0)