Skip to content

Commit d7f14d2

Browse files
author
aden.chen
committed
Using IServiceScopeFactory instead of IServiceProvider to create ServiceScope; Set default value to false for perporty ReentryProtection
1 parent 0c67ec9 commit d7f14d2

File tree

4 files changed

+12
-7
lines changed

4 files changed

+12
-7
lines changed

src/Infrastructure/BotSharp.Abstraction/Crontab/Models/CrontabItem.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class CrontabItem : ScheduleTaskArgs
3333
public CronTabItemTriggerType TriggerType { get; set; } = CronTabItemTriggerType.BackgroundWatcher;
3434

3535
[JsonPropertyName("reentry_protection")]
36-
public bool ReentryProtection { get; set; } = true;
36+
public bool ReentryProtection { get; set; }
3737

3838
public override string ToString()
3939
{

src/Infrastructure/BotSharp.Core.Crontab/Services/CrontabService.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,13 @@ namespace BotSharp.Core.Crontab.Services;
3434
public class CrontabService : ICrontabService, ITaskFeeder
3535
{
3636
private readonly IServiceProvider _services;
37+
private readonly IServiceScopeFactory _scopeFactory;
3738
private ILogger _logger;
3839

39-
public CrontabService(IServiceProvider services, ILogger<CrontabService> logger)
40+
public CrontabService(IServiceProvider services, IServiceScopeFactory scopeFactory, ILogger<CrontabService> logger)
4041
{
4142
_services = services;
43+
_scopeFactory = scopeFactory;
4244
_logger = logger;
4345
}
4446

@@ -166,7 +168,7 @@ public async Task ExecuteTimeArrivedItemWithReentryProtection(CrontabItem item)
166168
}
167169

168170
var lockKey = $"crontab:execution:{item.Title}";
169-
using var scope = _services.CreateScope();
171+
using var scope = _scopeFactory.CreateScope();
170172
var locker = scope.ServiceProvider.GetRequiredService<IDistributedLocker>();
171173
var acquired = false;
172174
var lockAcquired = false;

src/Infrastructure/BotSharp.OpenAPI/Controllers/Crontab/CrontabController.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@ namespace BotSharp.OpenAPI.Controllers;
1010
public class CrontabController : ControllerBase
1111
{
1212
private readonly IServiceProvider _services;
13+
private readonly IServiceScopeFactory _scopeFactory;
1314
private readonly ILogger<CrontabController> _logger;
1415

1516
public CrontabController(
1617
IServiceProvider services,
18+
IServiceScopeFactory scopeFactory,
1719
ILogger<CrontabController> logger)
1820
{
1921
_services = services;
22+
_scopeFactory = scopeFactory;
2023
_logger = logger;
2124
}
2225

@@ -61,7 +64,7 @@ public async Task<CrontabSchedulingResult> SchedulingCrontab()
6164
if (item.CheckNextOccurrenceEveryOneMinute())
6265
{
6366
_logger.LogInformation($"Crontab: {item.Title}, One occurrence was matched, attempting to execute...");
64-
Task.Run(() => ExecuteTimeArrivedItem(item, _services));
67+
Task.Run(() => ExecuteTimeArrivedItem(item));
6568
result.OccurrenceMatchedItems.Add(item.Title);
6669
}
6770
}
@@ -84,9 +87,9 @@ private async Task<List<CrontabItem>> GetCrontabItems(string? title = null)
8487
return allowedCrons.Where(cron => cron.Title.IsEqualTo(title)).ToList();
8588
}
8689

87-
private async Task ExecuteTimeArrivedItem(CrontabItem item, IServiceProvider services)
90+
private async Task ExecuteTimeArrivedItem(CrontabItem item)
8891
{
89-
using var scope = services.CreateScope();
92+
using var scope = _scopeFactory.CreateScope();
9093
var crontabService = scope.ServiceProvider.GetRequiredService<ICrontabService>();
9194
await crontabService.ExecuteTimeArrivedItemWithReentryProtection(item);
9295
}

src/Plugins/BotSharp.Plugin.MongoStorage/Collections/CrontabItemDocument.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class CrontabItemDocument : MongoBase
1919
public IEnumerable<CronTaskMongoElement> Tasks { get; set; } = [];
2020
public DateTime CreatedTime { get; set; } = DateTime.UtcNow;
2121
public int TriggerType { get; set; }
22-
public bool ReentryProtection { get; set; } = true;
22+
public bool ReentryProtection { get; set; }
2323

2424
public static CrontabItem ToDomainModel(CrontabItemDocument item)
2525
{

0 commit comments

Comments
 (0)