ASP.NET Core - 错误 CS0535“PerformanceBehaviour<TRequest, TResponse>”未实现接口成员“IPipelineBehavior

问题描述 投票:0回答:1

在 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;
        }
    }
}
asp.net-core-webapi mediatr
1个回答
0
投票

您的 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);

错误表明是后一种形式,但您的代码表明是前者。

© www.soinside.com 2019 - 2024. All rights reserved.