You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将日志记录器注入MediatR命令处理程序?

解决MediatR中从控制器传递日志记录器到命令处理程序的问题

首先,你不需要手动从控制器传递日志记录器——依赖注入(DI)才是正确的方式,MediatR和ASP.NET Core的DI系统完全兼容,直接在命令处理程序中注入日志记录器即可,根本不需要通过命令对象传递。

具体实现步骤:

  • 步骤1:确认日志服务已注册
    ASP.NET Core默认已注册ILogger<T>服务,无需额外配置,直接使用即可。

  • 步骤2:在命令处理程序中注入日志记录器
    直接在处理程序的构造函数中注入ILogger<YourHandler>,示例代码如下:

    public class YourCommandHandler : IRequestHandler<YourCommand, YourResult>
    {
        private readonly ILogger<YourCommandHandler> _logger;
    
        // 构造函数注入日志记录器
        public YourCommandHandler(ILogger<YourCommandHandler> logger)
        {
            _logger = logger;
        }
    
        public async Task<YourResult> Handle(YourCommand request, CancellationToken cancellationToken)
        {
            // 直接使用日志记录器输出日志
            _logger.LogInformation("开始处理命令:{CommandName}", nameof(YourCommand));
            // 执行业务逻辑...
            return new YourResult();
        }
    }
    
  • 步骤3:控制器中无需传递日志对象
    控制器仅负责接收请求、发送命令即可,日志记录器不需要通过命令对象传递:

    [ApiController]
    [Route("api/[controller]")]
    public class YourController : ControllerBase
    {
        private readonly IMediator _mediator;
        private readonly ILogger<YourController> _controllerLogger;
    
        public YourController(IMediator mediator, ILogger<YourController> controllerLogger)
        {
            _mediator = mediator;
            _controllerLogger = controllerLogger;
        }
    
        [HttpPost]
        public async Task<IActionResult> Post(YourCommand command)
        {
            _controllerLogger.LogInformation("收到命令请求,准备发送至MediatR处理");
            var result = await _mediator.Send(command);
            return Ok(result);
        }
    }
    

核心逻辑说明:

MediatR在解析命令处理程序时,会通过ASP.NET Core的DI容器自动注入所有依赖项,包括日志记录器。命令对象的职责仅为承载业务数据,不需要传递服务类(如日志器),这符合单一职责原则——命令负责传输数据,处理程序负责执行业务逻辑并记录日志。

如果需要在日志中关联请求上下文(如请求ID),可以通过MediatR的IPipelineBehavior实现拦截,将请求ID等上下文信息加入日志作用域,这样处理程序的日志会自动带上上下文标识,无需手动传递。

内容的提问来源于stack exchange,提问作者Inglonias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 08:37:10