小编Vla*_*tov的帖子

MediatR:INotification 处理程序被多次调用

我正在使用 MediatR 9.0.0 (带有 MediatR.Extensions.Microsoft.DependencyInjection 9.0.0)。我有这样的事件通知处理程序:

public class StatusChangedEventHandler : INotificationHandler<StatusChangedEvent>
{
    
   public StatusChangedEventHandler ()
   {
   }
    
   public async Task Handle(StatusChangedEvent evnt, CancellationToken cancellationToken)
   {
      //some code 
   }
}
Run Code Online (Sandbox Code Playgroud)

该事件正在从另一个命令处理程序发布:

public class ChangeStatusCommandHandler : IRequestHandler<ChangeStatusCommand, bool>
    {
        ...
        private readonly IMediator _mediator;

        public ChangeStatusCommandHandler(...,IMediator mediator)
        {
            ...
            _mediator = mediator;
        }

        public async Task<bool> Handle(ChangeStatusCommand command, CancellationToken cancellationToken)
        {

            ...

            await _mediator.Publish(new StatusChangedEvent(int id, string message));

            ...
            
        }
    }
Run Code Online (Sandbox Code Playgroud)

问题是 StatusChangedEventHandler.Handle 方法被多次调用 - 我注意到它似乎与 Startup.cs 中注册的命令处理程序的数量相关,例如

services.AddMediatR(typeof(CommandA));
Run Code Online (Sandbox Code Playgroud)

=> 处理程序将被调用一次

services.AddMediatR(typeof(CommandA)); …
Run Code Online (Sandbox Code Playgroud)

c# asp.net mediatr

2
推荐指数
1
解决办法
4180
查看次数

标签 统计

asp.net ×1

c# ×1

mediatr ×1