首页 > 解决方案 > MediatR - 无法创建 TResponse 的新实例

问题描述

我正在尝试创建一个新的 PipelineBehavior,它返回一个新的 TResponse 实例。

使用此代码,如果我在“句柄”上放置一个断点,我可以看到管道正常工作。

  public class ValidationBehaviour<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
        where TRequest : IRequest<TResponse>
        where TResponse : Response
    {
        private readonly ILogger<ValidationBehaviour<TRequest, TResponse>> _logger;
        private readonly IValidationHandler<TRequest> _validationHandler;
    
        public ValidationBehaviour(ILogger<ValidationBehaviour<TRequest, TResponse>> logger)
        {
            this._logger = logger;
        }
    
        public ValidationBehaviour(ILogger<ValidationBehaviour<TRequest, TResponse>> logger, IValidationHandler<TRequest> validationHandler)
        {
            this._logger = logger;
            this._validationHandler = validationHandler;
        }
    
        public async Task<TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate<TResponse> next)
        {
            var requestName = request.GetType();
            _logger.LogInformation("{Request} does not have a validation handler configured.", requestName);
            return await next();
        }
    }

但我不能有这种语法

return new TResponse { StatusCode = (int)HttpStatusCode.BadRequest, SFADevErrorMessage = result.Error };

我已经看到他们在约束中使用“new()”关键字的示例,这允许他们创建一个新的 TResponse 实例。像那样。

public class ValidationBehaviour<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
    where TRequest : IRequest<TResponse>
    where TResponse : Response, new()

如果我也这样做,我就能做到new TResponse { StatusCode = (int)HttpStatusCode.BadRequest, SFADevErrorMessage = result.Error };

但后来我的管道不工作 - 没有执行,可执行代码永远不会达到我的断点。

知道为什么会这样吗?我错过了什么吗?

标签: c#.netmediatr

解决方案


实际问题是我的where T : new(),与 mediatr 无关。我在这里找到了答案

TResponse 是 ApiResponse 的类型(这个类继承了 Response)并且需要一个默认的公共构造函数


推荐阅读