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

如何在.NET 5中通过接口而非类解析MediatR的IRequestHandler?

调整步骤

1. 修改Query接口继承关系

将你定义的IGetDeviceByIMEI接口继承MediatR的IRequest<T>,这样MediatR可以识别该接口为合法的请求类型:

public interface IGetDeviceByIMEI : IRequest<DeviceWrapperDataView>
{
    string IMEI { get; set; }
}

2. 调整Query实现类

原有的GetDeviceByIMEI类不需要再直接继承IRequest<T>,改为仅实现IGetDeviceByIMEI接口即可:

public class GetDeviceByIMEI: IGetDeviceByIMEI
{
    public string IMEI { get; set; }

    public GetDeviceByIMEI(string imei)
    {
        this.IMEI = imei;
    }
}

3. 改写Handler绑定规则

将Handler的泛型绑定从具体Query类改为Query接口,同时修改Handle方法的入参类型为接口:

public class GetDeviceByIMEIEventHandler : IRequestHandler<IGetDeviceByIMEI, DeviceWrapperDataView>, IGetDeviceByIMEIEventHandler
{      
    private readonly IDeviceEntity _DeviceEntity;
  
    public GetDeviceByIMEIEventHandler(IDeviceEntity DeviceEntity)
    {
        _DeviceEntity = DeviceEntity;
    }

    public async Task<DeviceWrapperDataView> Handle(IGetDeviceByIMEI request, CancellationToken cancellationToken)
    {
        // 原有数据查询逻辑保持不变
        return DeviceOutput;
    }
}

4. DI容器注册接口映射

在Program.cs/Startup.cs的服务注册逻辑中,添加Query接口和实现类的映射关系:

// 生命周期可根据业务需要调整为Scoped/Singleton
services.AddTransient<IGetDeviceByIMEI, GetDeviceByIMEI>();

5. 调整Controller调用逻辑

不再直接new具体Query类,改为从DI容器获取接口实例,赋值后发送请求即可:

private readonly IMediator _mediator;
private readonly IServiceProvider _serviceProvider;

public DeviceController(
    IMediator mediator,
    IServiceProvider serviceProvider)
{
    _mediator = mediator;
    _serviceProvider = serviceProvider;
}

[HttpGet()]
public async Task<IActionResult> GetDeviceByIMEI(string imei)
{
    var request = _serviceProvider.GetRequiredService<IGetDeviceByIMEI>();
    request.IMEI = imei;
    var result = await _mediator.Send(request);
    // 后续返回逻辑保持不变
}

注意事项

如果业务中存在多个IGetDeviceByIMEI接口的实现类,需要在DI注册时指定命名或者Key区分,避免MediatR匹配到错误的Handler。单实现场景下无需额外处理。

内容的提问来源于stack exchange,提问作者K.Z

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 18:45:08