asp.net-mvc - 如何使用 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
方法的操作方法创建唯一的请求模型?
解决方案
推荐阅读
- swift - VNDetectFaceRectanglesRequest 没有调用 completionHandler
- dart - flutter 获取布局渲染事件
- unicode - 为什么 NFKC 规范化会丢失上标和下标信息?
- c++ - 为什么基指针可以访问虚函数中的派生成员变量
- sql - 根据最新日期和 SQL Server 2008 R2 中的不同列获取表的最新行
- c# - 在没有静态引用的静态方法中修改另一个类中的类属性
- javascript - 使用第二个 jquery 请求上传文件
- amazon-web-services - 将 robots.txt 文件放入 S3 存储桶
- python - 基于多个键或多个键组合或合并字典
- javascript - Heroku Rails JS管道问题