Implement TimeProvider injection for deterministic timestamps across various services and modules

This commit is contained in:
master
2026-01-11 10:12:12 +02:00
parent 7f7eb8b228
commit f6ef1ef337
10 changed files with 54 additions and 18 deletions

View File

@@ -55,6 +55,7 @@ public sealed class FacetDriftVexWorkflow
private readonly FacetDriftVexEmitter _emitter;
private readonly IFacetDriftVexDraftStore _draftStore;
private readonly ILogger<FacetDriftVexWorkflow> _logger;
private readonly TimeProvider _timeProvider;
/// <summary>
/// Initializes a new instance of the <see cref="FacetDriftVexWorkflow"/> class.
@@ -62,11 +63,13 @@ public sealed class FacetDriftVexWorkflow
public FacetDriftVexWorkflow(
FacetDriftVexEmitter emitter,
IFacetDriftVexDraftStore draftStore,
ILogger<FacetDriftVexWorkflow>? logger = null)
ILogger<FacetDriftVexWorkflow>? logger = null,
TimeProvider? timeProvider = null)
{
_emitter = emitter ?? throw new ArgumentNullException(nameof(emitter));
_draftStore = draftStore ?? throw new ArgumentNullException(nameof(draftStore));
_logger = logger ?? NullLogger<FacetDriftVexWorkflow>.Instance;
_timeProvider = timeProvider ?? TimeProvider.System;
}
/// <summary>
@@ -261,6 +264,6 @@ public sealed class FacetDriftVexWorkflow
/// </summary>
public Task<ImmutableArray<FacetDriftVexDraft>> GetOverdueDraftsAsync(CancellationToken ct = default)
{
return _draftStore.GetOverdueAsync(DateTimeOffset.UtcNow, ct);
return _draftStore.GetOverdueAsync(_timeProvider.GetUtcNow(), ct);
}
}