首页 > 解决方案 > 如何使用 MediatR 为同一请求模型获取不同的响应类型?

问题描述

我试图了解MediatR 的工作原理。以前从未使用过这个库。下面的代码不是实际的生产代码。它仅用于理解目的。

假设我有两个 RequestHandlers。每个处理程序都接受ProductModel请求,但返回不同类型的响应。

public class GetOrdersHandler : IRequestHandler<ProductModel, IEnumerable<Order>>
{
    private readonly FakeDataStore _fakeDataStore;
    public GetOrdersHandler(FakeDataStore fakeDataStore)
    {
        _fakeDataStore = fakeDataStore;
    }
    public async Task<IEnumerable<Order>> Handle(ProductModel request,CancellationToken cancellationToken
    { 
        return await _fakeDataStore.GetAllOrdersForProduct(request);
    }
}


public class SaveProductHandler : IRequestHandler<ProductModel, Product>
{
    private readonly FakeDataStore _fakeDataStore;
    public SaveProductHandler(FakeDataStore fakeDataStore)
    {
        _fakeDataStore = fakeDataStore;
    }
    
    public async Task<Product> Handle(ProductModel request,CancellationToken cancellationToken)
    { 
        return await _fakeDataStore.SaveProduct(request);
    }
}

然后在同一个控制器中我有两个动作方法

public class ProductsController : ControllerBase
{
    private readonly IMediator _mediator;
    public ProductsController(IMediator mediator) => _mediator = mediator;

    [HttpPost]
    public async Task<ActionResult> GetAllOrders(ProductModel model)
    { 
       var product = await _mediator.Send(model);
       return Ok(product);
    }
    
    [HttpPost]
    public async Task<ActionResult> SaveProduct(ProductModel model)
    { 
       var product = await _mediator.Send(model);
       return Ok(product);
    }
}

根据 MediatR 代码,这可能不起作用。看起来该Send方法基于请求类型创建处理程序实例。它保存 RequestType 和相应处理程序的字典。

如果我的假设是正确的,那么这是否意味着我必须为每个将使用Send方法的操作方法创建唯一的请求模型?

标签: asp.net-mvcasp.net-coreasp.net-core-mvcmediatr

解决方案


推荐阅读