C# 使用MediatR是否可以为任何和所有请求创建通用RequestExceptionHandler?

C# 使用MediatR是否可以为任何和所有请求创建通用RequestExceptionHandler?,c#,.net-core,mediatr,C#,.net Core,Mediatr,我创建了一个具有如下已知类型的请求异常处理程序,并处理了该异常。我发现的唯一例子就是这样做 using MediatR.Pipeline; using Microsoft.Extensions.Logging; using MyPortal.Application.Common.Models; using MyPortal.Application.MyCommands.Commands.CompleteMyCommand; using System; using System.Threading

我创建了一个具有如下已知类型的请求异常处理程序,并处理了该异常。我发现的唯一例子就是这样做

using MediatR.Pipeline;
using Microsoft.Extensions.Logging;
using MyPortal.Application.Common.Models;
using MyPortal.Application.MyCommands.Commands.CompleteMyCommand;
using System;
using System.Threading;
using System.Threading.Tasks;

namespace MyPortal.Application.Common.Behaviors
{
    public class RequestGenericExceptionHandler : IRequestExceptionHandler<MyCommand, Result>
    {
        private readonly ILogger<MyCommand> _logger;

        public RequestGenericExceptionHandler(ILogger<MyCommand> logger)
        {
            _logger = logger;
        }

        public async Task Handle(MyCommand request,
            Exception exception,
            RequestExceptionHandlerState<Result> state,
            CancellationToken cancellationToken)
        {
            var name = typeof(MyCommand).Name;
            _logger.LogError("MyPortal Request Exception {@Request}",
                    name, exception.Message, request);
        }
    }
}

我需要做出以下改变:

public class RequestGenericExceptionHandler<TRequest, TResponse, TException> : IRequestExceptionHandler<TRequest, TResponse, TException>
    where TException : Exception {

    public async Task Handle(TRequest request,
        TException exception,
        RequestExceptionHandlerState<TResponse> state,
        CancellationToken cancellationToken) {}
}

参考资料:

这对我真的非常有帮助。我在网上找不到解释这个概念的好文章。Github上的代码不完整。
            services.AddMediatR(Assembly.GetExecutingAssembly());
public class RequestGenericExceptionHandler<TRequest, TResponse, TException> : IRequestExceptionHandler<TRequest, TResponse, TException>
    where TException : Exception {

    public async Task Handle(TRequest request,
        TException exception,
        RequestExceptionHandlerState<TResponse> state,
        CancellationToken cancellationToken) {}
}
services.AddTransient(typeof(IRequestExceptionHandler<,,>), typeof(RequestGenericExceptionHandler<,,>));