diff --git a/samples/Sample.Api/Handlers/GetResultRequestHandler.cs b/samples/Sample.Api/Handlers/GetResultRequestHandler.cs index a1aa885..af18687 100644 --- a/samples/Sample.Api/Handlers/GetResultRequestHandler.cs +++ b/samples/Sample.Api/Handlers/GetResultRequestHandler.cs @@ -4,10 +4,8 @@ namespace Sample.Api.Handlers; [MediatorHttpGet("GetThing", "/getthing/{parameter}")] public class GetResultRequestHandler : IRequestHandler { - public Task Handle(GetThingRequest request, CancellationToken cancellationToken) - { - return Task.FromResult($"Route: {request.Parameter} - Query: {request.Query}"); - } + public Task Handle(GetThingRequest request, RequestContext context, CancellationToken cancellationToken) + => Task.FromResult($"Route: {request.Parameter} - Query: {request.Query}"); } public class GetThingRequest : IRequest diff --git a/samples/Sample.Api/Handlers/MappedRequestHandler.cs b/samples/Sample.Api/Handlers/MappedRequestHandler.cs index 884ee73..71dd961 100644 --- a/samples/Sample.Api/Handlers/MappedRequestHandler.cs +++ b/samples/Sample.Api/Handlers/MappedRequestHandler.cs @@ -5,8 +5,6 @@ public record MappedRequest : IRequest; [SingletonHandler] public class MappedRequestHandler : IRequestHandler { - public Task Handle(MappedRequest request, CancellationToken cancellationToken) - { - return Task.FromResult("Hello world from mapped handler"); - } + public Task Handle(MappedRequest request, RequestContext context, CancellationToken cancellationToken) + => Task.FromResult("Hello world from mapped handler"); } \ No newline at end of file diff --git a/samples/Sample.Api/Handlers/TestResultRequestHandler.cs b/samples/Sample.Api/Handlers/TestResultRequestHandler.cs index 95e5c0f..f4c7248 100644 --- a/samples/Sample.Api/Handlers/TestResultRequestHandler.cs +++ b/samples/Sample.Api/Handlers/TestResultRequestHandler.cs @@ -8,8 +8,6 @@ public record TestResult; [MediatorHttpPost("TestResult", "/testresult")] public class TestResultRequestHandler : IRequestHandler { - public Task Handle(TestResultRequest request, CancellationToken cancellationToken) - { - return Task.FromResult(new TestResult()); - } + public Task Handle(TestResultRequest request, RequestContext context, CancellationToken cancellationToken) + => Task.FromResult(new TestResult()); } \ No newline at end of file diff --git a/samples/Sample.Blazor/Handlers/DoThingRequestHandler.cs b/samples/Sample.Blazor/Handlers/DoThingRequestHandler.cs index bfb89a4..594a3be 100644 --- a/samples/Sample.Blazor/Handlers/DoThingRequestHandler.cs +++ b/samples/Sample.Blazor/Handlers/DoThingRequestHandler.cs @@ -7,12 +7,12 @@ namespace Sample.Blazor.Handlers; public class DoThingRequestHandler(IMediator mediator) : IRequestHandler { [OfflineAvailable] - public async Task Handle(DoThing request, CancellationToken cancellationToken) + public async Task Handle(DoThing request, RequestContext context, CancellationToken cancellationToken) { var num = new Random().Next(1, 1000000); var value = $"{request.Text} - number: {num}"; await mediator.Publish(new TheThing(value), cancellationToken); - + return num; } } \ No newline at end of file diff --git a/samples/Sample.Blazor/Pages/Home.razor b/samples/Sample.Blazor/Pages/Home.razor index 47a6fcc..f606d8f 100644 --- a/samples/Sample.Blazor/Pages/Home.razor +++ b/samples/Sample.Blazor/Pages/Home.razor @@ -58,7 +58,7 @@ Welcome to your new app. this.text = null; } - public Task Handle(TheThing @event, EventContext context, CancellationToken cancellationToken) + public Task Handle(TheThing @event, EventContext context, CancellationToken cancellationToken) { Console.WriteLine("Received TheThing"); this.eventText = @event.Text; diff --git a/samples/Sample/AnotherViewModel.cs b/samples/Sample/AnotherViewModel.cs index 49fdf30..9db5a8c 100644 --- a/samples/Sample/AnotherViewModel.cs +++ b/samples/Sample/AnotherViewModel.cs @@ -26,6 +26,6 @@ public void OnNavigatedTo(INavigationParameters parameters) [ObservableProperty] string arg; [MainThread] - public Task Handle(MyMessageEvent @event, EventContext context, CancellationToken cancellationToken) => + public Task Handle(MyMessageEvent @event, EventContext context, CancellationToken cancellationToken) => conn.Log("AnotherViewModel", @event); } \ No newline at end of file diff --git a/samples/Sample/Components/Pages/Home.razor b/samples/Sample/Components/Pages/Home.razor index 3b6cb05..1959712 100644 --- a/samples/Sample/Components/Pages/Home.razor +++ b/samples/Sample/Components/Pages/Home.razor @@ -9,7 +9,7 @@ Welcome to your new app. @code { // TODO: should nav to another page to test that this disconnects - public async Task Handle(MyMessageEvent @event, EventContext context, CancellationToken cancellationToken) + public async Task Handle(MyMessageEvent @event, EventContext context, CancellationToken cancellationToken) { await conn.Log("BlazorPage-Home.razor", @event); } diff --git a/samples/Sample/Handlers/CachedRequestHandler.cs b/samples/Sample/Handlers/CachedRequestHandler.cs index 6fa8a04..b99902f 100644 --- a/samples/Sample/Handlers/CachedRequestHandler.cs +++ b/samples/Sample/Handlers/CachedRequestHandler.cs @@ -7,7 +7,7 @@ namespace Sample.Handlers; public class CachedRequestHandler : IRequestHandler { [Cache(AbsoluteExpirationSeconds = 20)] - public Task Handle(CacheRequest request, CancellationToken cancellationToken) + public Task Handle(CacheRequest request, RequestContext context, CancellationToken cancellationToken) { var r = DateTimeOffset.Now.ToString("h:mm:ss tt"); return Task.FromResult(r); diff --git a/samples/Sample/Handlers/OfflineRequestHandler.cs b/samples/Sample/Handlers/OfflineRequestHandler.cs index 6b4fce7..0fd2855 100644 --- a/samples/Sample/Handlers/OfflineRequestHandler.cs +++ b/samples/Sample/Handlers/OfflineRequestHandler.cs @@ -7,7 +7,7 @@ namespace Sample.Handlers; public class OfflineRequestHandler : IRequestHandler { [OfflineAvailable] - public Task Handle(OfflineRequest request, CancellationToken cancellationToken) + public Task Handle(OfflineRequest request, RequestContext context, CancellationToken cancellationToken) { var r = DateTimeOffset.Now.ToString("h:mm:ss tt"); return Task.FromResult(r); diff --git a/samples/Sample/Handlers/ResilientRequestHandler.cs b/samples/Sample/Handlers/ResilientRequestHandler.cs index 71b1c68..02fac9b 100644 --- a/samples/Sample/Handlers/ResilientRequestHandler.cs +++ b/samples/Sample/Handlers/ResilientRequestHandler.cs @@ -8,7 +8,7 @@ public class ResilientRequestHandler : IRequestHandler { static bool timeoutRequest; - public async Task Handle(ResilientRequest request, CancellationToken cancellationToken) + public async Task Handle(ResilientRequest request, RequestContext context, CancellationToken cancellationToken) { if (timeoutRequest) { diff --git a/samples/Sample/Handlers/SingletonEventHandler.cs b/samples/Sample/Handlers/SingletonEventHandler.cs index e59b5cf..4d3ddaa 100644 --- a/samples/Sample/Handlers/SingletonEventHandler.cs +++ b/samples/Sample/Handlers/SingletonEventHandler.cs @@ -6,7 +6,7 @@ namespace Sample.Handlers; [SingletonHandler] public class SingletonEventHandler(IMediator mediator, AppSqliteConnection data) : IEventHandler { - public async Task Handle(MyMessageEvent @event, EventContext context, CancellationToken cancellationToken) + public async Task Handle(MyMessageEvent @event, EventContext context, CancellationToken cancellationToken) { var random = new Random(); var wait = random.Next(500, 5000); diff --git a/samples/Sample/Handlers/SingletonRequestHandler.cs b/samples/Sample/Handlers/SingletonRequestHandler.cs index f78d845..cfe6830 100644 --- a/samples/Sample/Handlers/SingletonRequestHandler.cs +++ b/samples/Sample/Handlers/SingletonRequestHandler.cs @@ -8,7 +8,7 @@ public class SingletonRequestHandler(IMediator mediator, AppSqliteConnection dat { // [Cache(Storage = StoreType.File, MaxAgeSeconds = 30, OnlyForOffline = true)] [OfflineAvailable] - public async Task Handle(MyMessageRequest request, CancellationToken cancellationToken) + public async Task Handle(MyMessageRequest request, RequestContext context, CancellationToken cancellationToken) { var e = new MyMessageEvent( request.Arg, diff --git a/samples/Sample/TriggerViewModel.cs b/samples/Sample/TriggerViewModel.cs index 869791b..55f192d 100644 --- a/samples/Sample/TriggerViewModel.cs +++ b/samples/Sample/TriggerViewModel.cs @@ -24,7 +24,7 @@ IPageDialogService dialogs [MainThread] - public Task Handle(MyMessageEvent @event, EventContext context, CancellationToken cancellationToken) + public Task Handle(MyMessageEvent @event, EventContext context, CancellationToken cancellationToken) { // do something async here Console.WriteLine("Scoped Handler: " + @event.Arg); diff --git a/src/Shiny.Mediator.AppSupport/Middleware/OfflineFlushEventHandler.cs b/src/Shiny.Mediator.AppSupport/Middleware/OfflineFlushEventHandler.cs index a56d2a8..8a0f8ad 100644 --- a/src/Shiny.Mediator.AppSupport/Middleware/OfflineFlushEventHandler.cs +++ b/src/Shiny.Mediator.AppSupport/Middleware/OfflineFlushEventHandler.cs @@ -8,12 +8,12 @@ public class OfflineFlushEventHandlers(IOfflineService offline) : IEventHandler, IEventHandler { - public Task Handle(FlushAllStoresEvent @event, EventContext context, CancellationToken cancellationToken) + public Task Handle(FlushAllStoresEvent @event, EventContext context, CancellationToken cancellationToken) => offline.Clear(); - public Task Handle(FlushStoreByRequestEvent @event, EventContext context, CancellationToken cancellationToken) + public Task Handle(FlushStoreByRequestEvent @event, EventContext context, CancellationToken cancellationToken) => offline.ClearByRequest(@event.Request); - public Task Handle(FlushStoreByTypeEvent @event, EventContext context, CancellationToken cancellationToken) + public Task Handle(FlushStoreByTypeEvent @event, EventContext context, CancellationToken cancellationToken) => offline.ClearByType(@event.Type); } \ No newline at end of file diff --git a/src/Shiny.Mediator.DapperRequests/Handlers/DapperFirstQueryRequestHandler.cs b/src/Shiny.Mediator.DapperRequests/Handlers/DapperFirstQueryRequestHandler.cs index e3d855f..5dbf16a 100644 --- a/src/Shiny.Mediator.DapperRequests/Handlers/DapperFirstQueryRequestHandler.cs +++ b/src/Shiny.Mediator.DapperRequests/Handlers/DapperFirstQueryRequestHandler.cs @@ -7,12 +7,15 @@ public class DapperFirstQueryRequestHandler( IConnectionProvider connectionProvider ) : IRequestHandler, TResult> { - public Task Handle(DapperFirstQuery request, CancellationToken cancellationToken) - => connectionProvider - .Create(request) - .QueryBuilder(request.Sql) - .QueryFirstOrDefaultAsync( - commandTimeout: request.CommandTimeout, - cancellationToken: cancellationToken - ); + public Task Handle( + DapperFirstQuery request, + RequestContext> context, + CancellationToken cancellationToken + ) => connectionProvider + .Create(request) + .QueryBuilder(request.Sql) + .QueryFirstOrDefaultAsync( + commandTimeout: request.CommandTimeout, + cancellationToken: cancellationToken + ); } \ No newline at end of file diff --git a/src/Shiny.Mediator.DapperRequests/Handlers/DapperQueryRequestHandler.cs b/src/Shiny.Mediator.DapperRequests/Handlers/DapperQueryRequestHandler.cs index 9b7d3b1..a9ed8b7 100644 --- a/src/Shiny.Mediator.DapperRequests/Handlers/DapperQueryRequestHandler.cs +++ b/src/Shiny.Mediator.DapperRequests/Handlers/DapperQueryRequestHandler.cs @@ -6,13 +6,16 @@ public class DapperQueryRequestHandler( IConnectionProvider connectionProvider ) : IRequestHandler, IEnumerable> { - public Task> Handle(DapperQuery request, CancellationToken cancellationToken) - => connectionProvider - .Create(request) - .QueryBuilder(request.Sql) - .QueryAsync( - null, - request.CommandTimeout, - cancellationToken: cancellationToken - ); + public Task> Handle( + DapperQuery request, + RequestContext> context, + CancellationToken cancellationToken + ) => connectionProvider + .Create(request) + .QueryBuilder(request.Sql) + .QueryAsync( + null, + request.CommandTimeout, + cancellationToken: cancellationToken + ); } \ No newline at end of file diff --git a/src/Shiny.Mediator.DapperRequests/Handlers/DapperScalarRequestHandler.cs b/src/Shiny.Mediator.DapperRequests/Handlers/DapperScalarRequestHandler.cs index 9ea3474..1bfd9b7 100644 --- a/src/Shiny.Mediator.DapperRequests/Handlers/DapperScalarRequestHandler.cs +++ b/src/Shiny.Mediator.DapperRequests/Handlers/DapperScalarRequestHandler.cs @@ -5,7 +5,7 @@ namespace Shiny.Mediator.DapperRequests.Handlers; public class DapperScalarRequestHandler(IConnectionProvider connectionProvider) : IRequestHandler { - public Task Handle(DapperScalar request, CancellationToken cancellationToken) + public Task Handle(DapperScalar request, RequestContext context, CancellationToken cancellationToken) => connectionProvider .Create(request) .QueryBuilder(request.Sql) diff --git a/src/Shiny.Mediator/Caching/Infrastructure/FlushStoreEventHandlers.cs b/src/Shiny.Mediator/Caching/Infrastructure/FlushStoreEventHandlers.cs index 873bfda..7661705 100644 --- a/src/Shiny.Mediator/Caching/Infrastructure/FlushStoreEventHandlers.cs +++ b/src/Shiny.Mediator/Caching/Infrastructure/FlushStoreEventHandlers.cs @@ -6,20 +6,20 @@ public class FlushStoreEventHandlers(ICacheService cache) : IEventHandler, IEventHandler { - public Task Handle(FlushAllStoresEvent @event, EventContext context, CancellationToken cancellationToken) + public Task Handle(FlushAllStoresEvent @event, EventContext context, CancellationToken cancellationToken) { cache.Clear(); return Task.CompletedTask; } - public Task Handle(FlushStoreByRequestEvent @event, EventContext context, CancellationToken cancellationToken) + public Task Handle(FlushStoreByRequestEvent @event, EventContext context, CancellationToken cancellationToken) { var requestkey = Utils.GetRequestKey(@event.Request); cache.Remove(requestkey); return Task.CompletedTask; } - public Task Handle(FlushStoreByTypeEvent @event, EventContext context, CancellationToken cancellationToken) + public Task Handle(FlushStoreByTypeEvent @event, EventContext context, CancellationToken cancellationToken) { var t = @event.Type; var startsWith = $"{t.Namespace}.{t.Name}"; diff --git a/src/Shiny.Mediator/CommandContext.cs b/src/Shiny.Mediator/CommandContext.cs index 8062ee9..2676546 100644 --- a/src/Shiny.Mediator/CommandContext.cs +++ b/src/Shiny.Mediator/CommandContext.cs @@ -7,7 +7,15 @@ public class CommandContext(ICommandHandler handler, ICommand command) public Guid CommandId { get; }= Guid.NewGuid(); public IReadOnlyDictionary Values => this.store.ToDictionary(); public void Add(string key, object value) => this.store.Add(key, value); - + + public ICommand Command => command; public ICommandHandler Handler => handler; +} + +public class CommandContext(ICommandHandler handler, TCommand command) : CommandContext(handler, command) + where TCommand : ICommand +{ + public new TCommand Command => command; + public new ICommandHandler Handler => handler; } \ No newline at end of file diff --git a/src/Shiny.Mediator/EventAggregatedContext.cs b/src/Shiny.Mediator/EventAggregatedContext.cs new file mode 100644 index 0000000..df9db2f --- /dev/null +++ b/src/Shiny.Mediator/EventAggregatedContext.cs @@ -0,0 +1,6 @@ +namespace Shiny.Mediator; + +public class EventAggregatedContext(IReadOnlyList> contexts) where TEvent : IEvent +{ + public IReadOnlyList> HandlerExecutions => contexts; +} \ No newline at end of file diff --git a/src/Shiny.Mediator/EventAggregatedExecutionContext.cs b/src/Shiny.Mediator/EventAggregatedExecutionContext.cs deleted file mode 100644 index 8b217b7..0000000 --- a/src/Shiny.Mediator/EventAggregatedExecutionContext.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Shiny.Mediator; - -public class EventAggregatedExecutionContext(IReadOnlyList> contexts) where TEvent : IEvent -{ - public IReadOnlyList> HandlerExecutions => contexts; -} \ No newline at end of file diff --git a/src/Shiny.Mediator/Http/HttpRequestHandler.cs b/src/Shiny.Mediator/Http/HttpRequestHandler.cs index 4d66463..6da0279 100644 --- a/src/Shiny.Mediator/Http/HttpRequestHandler.cs +++ b/src/Shiny.Mediator/Http/HttpRequestHandler.cs @@ -19,7 +19,7 @@ IEnumerable> decorators readonly HttpClient httpClient = new(); - public async Task Handle(TRequest request, CancellationToken cancellationToken) + public async Task Handle(TRequest request, RequestContext context, CancellationToken cancellationToken) { var http = request.GetType().GetCustomAttribute(); if (http == null) diff --git a/src/Shiny.Mediator/ICommandMiddleware.cs b/src/Shiny.Mediator/ICommandMiddleware.cs index b40ff8a..e261c82 100644 --- a/src/Shiny.Mediator/ICommandMiddleware.cs +++ b/src/Shiny.Mediator/ICommandMiddleware.cs @@ -5,8 +5,7 @@ namespace Shiny.Mediator; public interface ICommandMiddleware where TCommand : ICommand { Task Process( - TCommand command, - CommandContext context, + CommandContext context, CommandHandlerDelegate next, CancellationToken cancellationToken ); diff --git a/src/Shiny.Mediator/IEventHandler.cs b/src/Shiny.Mediator/IEventHandler.cs index 2b82026..d28f79c 100644 --- a/src/Shiny.Mediator/IEventHandler.cs +++ b/src/Shiny.Mediator/IEventHandler.cs @@ -4,7 +4,7 @@ namespace Shiny.Mediator; /// /// /// -public interface IEventHandler where TEvent : IEvent +public interface IEventHandler where TEvent : IEvent { /// /// / @@ -12,5 +12,5 @@ public interface IEventHandler where TEvent : IEvent /// /// /// - Task Handle(TEvent @event, EventContext context, CancellationToken cancellationToken); + Task Handle(TEvent @event, EventContext context, CancellationToken cancellationToken); } \ No newline at end of file diff --git a/src/Shiny.Mediator/IMediator.cs b/src/Shiny.Mediator/IMediator.cs index fbe2451..bc462fc 100644 --- a/src/Shiny.Mediator/IMediator.cs +++ b/src/Shiny.Mediator/IMediator.cs @@ -21,7 +21,7 @@ Task> RequestWithContext( /// /// /// - Task Send( + Task> Send( TCommand request, CancellationToken cancellationToken = default ) where TCommand : ICommand; @@ -46,7 +46,7 @@ RequestResult> RequestWithContext( /// /// /// - Task> Publish( + Task> Publish( TEvent @event, CancellationToken cancellationToken = default, bool executeInParallel = true @@ -59,6 +59,6 @@ Task> Publish( /// /// IDisposable Subscribe( - Func action + Func, CancellationToken, Task> action ) where TEvent : IEvent; } \ No newline at end of file diff --git a/src/Shiny.Mediator/IRequestHandler.cs b/src/Shiny.Mediator/IRequestHandler.cs index a03bced..9bf9881 100644 --- a/src/Shiny.Mediator/IRequestHandler.cs +++ b/src/Shiny.Mediator/IRequestHandler.cs @@ -5,5 +5,5 @@ public interface IRequestHandler { } public interface IRequestHandler : IRequestHandler where TRequest : IRequest { - Task Handle(TRequest request, CancellationToken cancellationToken); + Task Handle(TRequest request, RequestContext context, CancellationToken cancellationToken); } \ No newline at end of file diff --git a/src/Shiny.Mediator/Infrastructure/Impl/Mediator_Commands.cs b/src/Shiny.Mediator/Infrastructure/Impl/Mediator_Commands.cs index dc17add..c4605dc 100644 --- a/src/Shiny.Mediator/Infrastructure/Impl/Mediator_Commands.cs +++ b/src/Shiny.Mediator/Infrastructure/Impl/Mediator_Commands.cs @@ -6,7 +6,7 @@ namespace Shiny.Mediator.Infrastructure.Impl; public partial class Mediator { - public async Task Send( + public async Task> Send( TCommand command, CancellationToken cancellationToken = default ) where TCommand : ICommand @@ -16,7 +16,7 @@ public async Task Send( if (commandHandler == null) throw new InvalidOperationException("No command handler found for " + command.GetType().FullName); - var context = new CommandContext(commandHandler, command); + var context = new CommandContext(commandHandler, command); var logger = scope.ServiceProvider.GetRequiredService>(); var handlerExec = new CommandHandlerDelegate(async () => { @@ -42,7 +42,6 @@ await middlewares ); return middleware.Process( - command, context, next, cancellationToken diff --git a/src/Shiny.Mediator/Infrastructure/Impl/Mediator_Events.cs b/src/Shiny.Mediator/Infrastructure/Impl/Mediator_Events.cs index 5bcfe17..8347bb8 100644 --- a/src/Shiny.Mediator/Infrastructure/Impl/Mediator_Events.cs +++ b/src/Shiny.Mediator/Infrastructure/Impl/Mediator_Events.cs @@ -8,7 +8,7 @@ public partial class Mediator { readonly SubscriptionEventCollector subscriptions = new(); - public virtual async Task> Publish( + public virtual async Task> Publish( TEvent @event, CancellationToken cancellationToken = default, bool executeInParallel = true @@ -28,7 +28,7 @@ public virtual async Task> Publish>(); - var context = new EventAggregatedExecutionContext(list); + var context = new EventAggregatedContext(list); if (handlers.Count == 0) return context; @@ -67,7 +67,7 @@ await Task return context; } - public IDisposable Subscribe(Func action) where TEvent : IEvent + public IDisposable Subscribe(Func, CancellationToken, Task> action) where TEvent : IEvent { var handler = new SubscriptionEventHandler(this.subscriptions); handler.OnHandle = action; diff --git a/src/Shiny.Mediator/Infrastructure/Impl/Mediator_Requests.cs b/src/Shiny.Mediator/Infrastructure/Impl/Mediator_Requests.cs index 5a2bb8d..b023d26 100644 --- a/src/Shiny.Mediator/Infrastructure/Impl/Mediator_Requests.cs +++ b/src/Shiny.Mediator/Infrastructure/Impl/Mediator_Requests.cs @@ -50,7 +50,7 @@ public async Task> Handle() "Executing request handler {RequestHandlerType}", requestHandler.GetType().FullName ); - return requestHandler.Handle(context.Request, context.CancellationToken); + return requestHandler.Handle(context.Request, context, context.CancellationToken); }); var result = await middlewares diff --git a/src/Shiny.Mediator/Infrastructure/SubscriptionEventHandler.cs b/src/Shiny.Mediator/Infrastructure/SubscriptionEventHandler.cs index 6053c67..4283e43 100644 --- a/src/Shiny.Mediator/Infrastructure/SubscriptionEventHandler.cs +++ b/src/Shiny.Mediator/Infrastructure/SubscriptionEventHandler.cs @@ -13,9 +13,9 @@ public SubscriptionEventHandler(SubscriptionEventCollector collector) } - public Func? OnHandle { get; set; } + public Func, CancellationToken, Task>? OnHandle { get; set; } - public Task Handle(TEvent @event, EventContext context, CancellationToken cancellationToken) + public Task Handle(TEvent @event, EventContext context, CancellationToken cancellationToken) { if (this.OnHandle == null) throw new InvalidOperationException("MediatorEventHandler.OnHandle is not set"); diff --git a/src/Shiny.Mediator/Middleware/ScheduledCommandMiddleware.cs b/src/Shiny.Mediator/Middleware/ScheduledCommandMiddleware.cs index 5b8155e..9f3ad79 100644 --- a/src/Shiny.Mediator/Middleware/ScheduledCommandMiddleware.cs +++ b/src/Shiny.Mediator/Middleware/ScheduledCommandMiddleware.cs @@ -7,13 +7,12 @@ ICommandScheduler scheduler ) : ICommandMiddleware where TCommand : IScheduledCommand { public async Task Process( - TCommand command, - CommandContext context, + CommandContext context, CommandHandlerDelegate next, CancellationToken cancellationToken ) { - if (command.DueAt == null) + if (context.Command.DueAt == null) { await next().ConfigureAwait(false); } diff --git a/tests/Shiny.Mediator.Tests/DataAnnotationsTests.cs b/tests/Shiny.Mediator.Tests/DataAnnotationsTests.cs index edeb422..6d44ec8 100644 --- a/tests/Shiny.Mediator.Tests/DataAnnotationsTests.cs +++ b/tests/Shiny.Mediator.Tests/DataAnnotationsTests.cs @@ -75,7 +75,7 @@ public Task Handle(ValidationCommand request, CommandContext context, Cancellati public class ValidationRequestHandler : IRequestHandler { - public Task Handle(ValidationRequest request, CancellationToken cancellationToken) + public Task Handle(ValidationRequest request, RequestContext context, CancellationToken cancellationToken) { return Task.FromResult(ValidateResult.Success); } diff --git a/tests/Shiny.Mediator.Tests/EventHandlerTests.cs b/tests/Shiny.Mediator.Tests/EventHandlerTests.cs index 70bbc73..3da1ac3 100644 --- a/tests/Shiny.Mediator.Tests/EventHandlerTests.cs +++ b/tests/Shiny.Mediator.Tests/EventHandlerTests.cs @@ -51,7 +51,7 @@ public class TestEvent : IEvent } public class Test1EventHandler : IEventHandler { - public async Task Handle(TestEvent @event, EventContext context, CancellationToken cancellationToken) + public async Task Handle(TestEvent @event, EventContext context, CancellationToken cancellationToken) { if (@event.Delay > 0) await Task.Delay(@event.Delay); @@ -59,7 +59,7 @@ public async Task Handle(TestEvent @event, EventContext context, CancellationTok } public class Test2EventHandler : IEventHandler { - public async Task Handle(TestEvent @event, EventContext context, CancellationToken cancellationToken) + public async Task Handle(TestEvent @event, EventContext context, CancellationToken cancellationToken) { if (@event.Delay > 0) await Task.Delay(@event.Delay); @@ -70,7 +70,7 @@ public class TestTestEvent : TestEvent; public class CatchAllEventHandler : IEventHandler { public static bool Executed { get; set; } - public Task Handle(TestTestEvent @event, EventContext context, CancellationToken cancellationToken) + public Task Handle(TestTestEvent @event, EventContext context, CancellationToken cancellationToken) { Executed = true; return Task.CompletedTask; diff --git a/tests/Shiny.Mediator.Tests/MiddlewareTests.cs b/tests/Shiny.Mediator.Tests/MiddlewareTests.cs index 559b562..33ab3bf 100644 --- a/tests/Shiny.Mediator.Tests/MiddlewareTests.cs +++ b/tests/Shiny.Mediator.Tests/MiddlewareTests.cs @@ -49,7 +49,7 @@ public class MiddlewareResultRequest : IRequest; public class MiddlewareRequestResultHandler : IRequestHandler { - public Task Handle(MiddlewareResultRequest request, CancellationToken cancellationToken) + public Task Handle(MiddlewareResultRequest request, RequestContext context, CancellationToken cancellationToken) => Task.FromResult(1); } diff --git a/tests/Shiny.Mediator.Tests/OfflineAvailableMiddlewareTests.cs b/tests/Shiny.Mediator.Tests/OfflineAvailableMiddlewareTests.cs index 1b0479f..45db606 100644 --- a/tests/Shiny.Mediator.Tests/OfflineAvailableMiddlewareTests.cs +++ b/tests/Shiny.Mediator.Tests/OfflineAvailableMiddlewareTests.cs @@ -44,7 +44,7 @@ public async Task EndToEnd() var func = () => this.middleware.Process( context, - () => this.handler.Handle(context.Request, CancellationToken.None) + () => this.handler.Handle(context.Request, context, CancellationToken.None) ); var result = await func(); @@ -70,7 +70,7 @@ public class OfflineRequestHandler : IRequestHandler public long ReturnValue { get; set; } [OfflineAvailable] - public Task Handle(OfflineRequest request, CancellationToken cancellationToken) + public Task Handle(OfflineRequest request, RequestContext context, CancellationToken cancellationToken) { this.WasHit = true; return Task.FromResult(this.ReturnValue); diff --git a/tests/Shiny.Mediator.Tests/RequestHandlerTests.cs b/tests/Shiny.Mediator.Tests/RequestHandlerTests.cs index 2835633..305a59a 100644 --- a/tests/Shiny.Mediator.Tests/RequestHandlerTests.cs +++ b/tests/Shiny.Mediator.Tests/RequestHandlerTests.cs @@ -21,6 +21,6 @@ public record TestResultRequest(string Arg) : IRequest; public class TestResultRequestHandler : IRequestHandler { - public Task Handle(TestResultRequest request, CancellationToken cancellationToken) + public Task Handle(TestResultRequest request, RequestContext context, CancellationToken cancellationToken) => Task.FromResult("RESPONSE-" + request.Arg); } \ No newline at end of file diff --git a/tests/Shiny.Mediator.Tests/SourceGeneratorTests.cs b/tests/Shiny.Mediator.Tests/SourceGeneratorTests.cs index bbb85ca..f9b4885 100644 --- a/tests/Shiny.Mediator.Tests/SourceGeneratorTests.cs +++ b/tests/Shiny.Mediator.Tests/SourceGeneratorTests.cs @@ -30,11 +30,11 @@ public class SourceGenCommandHandler : ICommandHandler [SingletonHandler] public class SourceGenResponseRequestHandler : IRequestHandler { - public Task Handle(SourceGenResponseRequest request, CancellationToken cancellationToken) + public Task Handle(SourceGenResponseRequest request, RequestContext context, CancellationToken cancellationToken) => Task.FromResult(new SourceGenResponse()); } [SingletonHandler] public class SourceGenEventHandler : IEventHandler { - public Task Handle(SourceGenEvent @event, EventContext context, CancellationToken cancellationToken) => Task.CompletedTask; + public Task Handle(SourceGenEvent @event, EventContext context, CancellationToken cancellationToken) => Task.CompletedTask; } \ No newline at end of file