c# - 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 };
但后来我的管道不工作 - 没有执行,可执行代码永远不会达到我的断点。
知道为什么会这样吗?我错过了什么吗?
解决方案
实际问题是我的where T : new()
,与 mediatr 无关。我在这里找到了答案
TResponse 是 ApiResponse 的类型(这个类继承了 Response)并且需要一个默认的公共构造函数
推荐阅读
- java - 使用 collectors.groupingby 修改过滤器方法
- scala - 类型更高的 lambda
- image - 我想在对多个页面进行图像抓取后下载
- security - 将 ngrok 用于 RDP - 安全性
- ruby - Ruby - telnet 行为不一致
- java - 通过 Java 代码在另一个 shell 脚本中执行 shell 脚本
- python - 使用 pyspark 不进行聚合的枢轴函数
- vbscript - 如何在经典 ASP 中将字符串转换为字节数组
- java - 在wiremock响应中编码特殊字符
- javascript - 选择在 ajax 自动完成中显示未定义的部分