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