在 ASP.NET Core-8 中使用 MediatR 我收到此错误:
错误CS0535“PerformanceBehaviour
”未实现接口成员“IPipelineBehavior .Handle(TRequest,RequestHandlerDelegate,CancellationToken)”
它强调:
IPipelineBehavior<TRequest, TResponse>
表现行为:
using MediatR;
using Microsoft.Extensions.Logging;
using System.Diagnostics;
namespace SpecMaker.Application.Common.Behaviours
{
public class PerformanceBehaviour<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
where TRequest : IRequest<TResponse>
{
private readonly Stopwatch _timer;
private readonly ILogger<TRequest> _logger;
public PerformanceBehaviour(ILogger<TRequest> logger)
{
_timer = new Stopwatch();
_logger = logger;
}
public async Task<TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate<TResponse> next)
{
_timer.Start();
var response = await next();
_timer.Stop();
var elapsedMilliseconds = _timer.ElapsedMilliseconds;
if (elapsedMilliseconds > 600)
{
var requestName = typeof(TRequest).Name;
var userName = string.Empty;
_logger.LogWarning("SpecMaker Long Running Request: {Name} ({ElapsedMilliseconds} milliseconds) {@Request}",
requestName, elapsedMilliseconds, request);
}
return response;
}
}
}
您的 MediatR 版本可能存在冲突?
v10 的接口方法中间有 CancellationToken,就像你的代码一样。
Task<TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate<TResponse> next);
但是 v11 对此进行了更改,将 CancellationToken 放在方法签名的末尾。
Task<TResponse> Handle(TRequest request, RequestHandlerDelegate<TResponse> next, CancellationToken cancellationToken);
错误表明是后一种形式,但您的代码表明是前者。