From 37cb52fe3e8c6b1c480a8ca91a8b2dde0dd800da Mon Sep 17 00:00:00 2001 From: Jens De Craecker Date: Fri, 12 Sep 2025 16:37:08 +0200 Subject: [PATCH] Add MediatorOptions class and update SendEndpointRequestFilter to use options for request failure handling --- .../MediatorOptions.cs | 8 ++++++++ .../SendEndpointRequestFilter.cs | 7 +++++-- 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 src/Baguette.Extensions.AspNetCore.Mediator/MediatorOptions.cs diff --git a/src/Baguette.Extensions.AspNetCore.Mediator/MediatorOptions.cs b/src/Baguette.Extensions.AspNetCore.Mediator/MediatorOptions.cs new file mode 100644 index 0000000..5ca9639 --- /dev/null +++ b/src/Baguette.Extensions.AspNetCore.Mediator/MediatorOptions.cs @@ -0,0 +1,8 @@ +using Microsoft.AspNetCore.Http; + +namespace Baguette.Extensions.AspNetCore.Mediator; + +public class MediatorOptions +{ + public Func> OnRequestSendFailed { get; set; } = (_, _) => throw new NotImplementedException(); +} \ No newline at end of file diff --git a/src/Baguette.Extensions.AspNetCore.Mediator/SendEndpointRequestFilter.cs b/src/Baguette.Extensions.AspNetCore.Mediator/SendEndpointRequestFilter.cs index 1945a95..90ee507 100644 --- a/src/Baguette.Extensions.AspNetCore.Mediator/SendEndpointRequestFilter.cs +++ b/src/Baguette.Extensions.AspNetCore.Mediator/SendEndpointRequestFilter.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; namespace Baguette.Extensions.AspNetCore.Mediator; @@ -8,6 +9,7 @@ public class SendEndpointRequestFilter : IEndpointFilter public async ValueTask InvokeAsync(EndpointFilterInvocationContext context, EndpointFilterDelegate next) { var mediator = context.HttpContext.RequestServices.GetRequiredService(); + var options = context.HttpContext.RequestServices.GetRequiredService>().Value; var value = await next(context); @@ -18,7 +20,7 @@ public class SendEndpointRequestFilter : IEndpointFilter return success ? Results.Ok(response) - : throw new InvalidOperationException(); // TODO: Handle case where request can't be sent or response can't be produced + : await options.OnRequestSendFailed(context, value); } } @@ -27,6 +29,7 @@ public class SendEndpointRequestFilter : IEndpointFilter public async ValueTask InvokeAsync(EndpointFilterInvocationContext context, EndpointFilterDelegate next) { var mediator = context.HttpContext.RequestServices.GetRequiredService(); + var options = context.HttpContext.RequestServices.GetRequiredService>().Value; var value = await next(context); @@ -35,6 +38,6 @@ public class SendEndpointRequestFilter : IEndpointFilter return await mediator.TrySendAsync(value) ? Results.Ok() - : throw new InvalidOperationException(); // TODO: Handle case where request can't be sent + : await options.OnRequestSendFailed(context, value); } } \ No newline at end of file