11using System ;
2+ using System . Threading ;
3+ using System . Threading . Tasks ;
24using EntityFrameworkCore . Triggered . Internal ;
35using EntityFrameworkCore . Triggered . Internal . RecursionStrategy ;
46using Microsoft . EntityFrameworkCore ;
7+ using Microsoft . EntityFrameworkCore . Infrastructure ;
58using Microsoft . Extensions . Logging ;
69using Microsoft . Extensions . Options ;
710
811namespace EntityFrameworkCore . Triggered
912{
10- public class TriggerService : ITriggerService
13+ public class TriggerService : ITriggerService , IResettableService
1114 {
1215 readonly ITriggerDiscoveryService _triggerDiscoveryService ;
1316 readonly IRecursionStrategy _recursionStrategy ;
1417 readonly ILoggerFactory _loggerFactory ;
1518 readonly TriggerOptions _options ;
1619
20+ ITriggerSession ? _currentTriggerSession ;
21+
1722 public TriggerService ( ITriggerDiscoveryService triggerDiscoveryService , IRecursionStrategy recursionStrategy , ILoggerFactory loggerFactory , IOptionsSnapshot < TriggerOptions > triggerOptionsSnapshot )
1823 {
1924 _triggerDiscoveryService = triggerDiscoveryService ?? throw new ArgumentNullException ( nameof ( triggerDiscoveryService ) ) ;
@@ -22,6 +27,12 @@ public TriggerService(ITriggerDiscoveryService triggerDiscoveryService, IRecursi
2227 _options = triggerOptionsSnapshot . Value ;
2328 }
2429
30+ public ITriggerSession ? Current
31+ {
32+ get => _currentTriggerSession ;
33+ set => _currentTriggerSession = value ;
34+ }
35+
2536 public ITriggerSession CreateSession ( DbContext context , IServiceProvider ? serviceProvider )
2637 {
2738 if ( context is null )
@@ -36,7 +47,19 @@ public ITriggerSession CreateSession(DbContext context, IServiceProvider? servic
3647 _triggerDiscoveryService . SetServiceProvider ( serviceProvider ) ;
3748 }
3849
39- return new TriggerSession ( _options , _triggerDiscoveryService , triggerContextTracker , _loggerFactory . CreateLogger < TriggerSession > ( ) ) ;
50+ var triggerSession = new TriggerSession ( this , _options , _triggerDiscoveryService , triggerContextTracker , _loggerFactory . CreateLogger < TriggerSession > ( ) ) ;
51+
52+ _currentTriggerSession = triggerSession ;
53+
54+ return triggerSession ;
55+ }
56+
57+ public void ResetState ( ) => _currentTriggerSession ? . Dispose ( ) ;
58+ public Task ResetStateAsync ( CancellationToken cancellationToken = default )
59+ {
60+ _currentTriggerSession ? . Dispose ( ) ;
61+
62+ return Task . CompletedTask ;
4063 }
4164 }
4265}
0 commit comments