【问题标题】:Execture MediatR request without query执行 MediatR 请求而不进行查询
【发布时间】:2021-01-12 21:30:10
【问题描述】:

我有一个班级ProductService.cs,看起来像:

public class ProductService : IProductService
{
    private readonly IMediator _mediator;

    public ProductService(IMediator mediator)
    {
        _mediator = mediator;
    }

    public async Task<IQueryable<Models.Product>> GetActiveProducts()
    {
        var products = await _mediator.Send(new FindProducts);
        return products.Where(product => product.Status.Id == (int)ProductStatusEnum.Active);
    }
}

然后我的FindProducts 看起来像这样:

public class FindProducts
{
    public class Handler : IRequest<IQueryable<Models.Product>>
    {
        private readonly ApplicationDbContext _dbContext;

        public Handler(ApplicationDbContext dbContext)
        {
            _dbContext = dbContext;
        }

        public IQueryable<Models.Product> Handle()
        {
            return _dbContext.Products
            .Select(p => new Models.Product
            {
               Name = p.Name,
               Status = new ProductStatus
               {
                  Id = p.Status.Id,
                  Status = p.Status.Status
                }
            })
            .AsQueryable();
        }
    }
 }

但是这不会编译,因为我得到构建错误A new expression requires (), [], or {} after type 我已经在整个网络上搜索,找不到任何关于如何在不发送 Query 的情况下发送 MediatR 请求的示例或文档,理想情况下这将获取所有产品,而不考虑产品数据。

我错过了什么吗?

【问题讨论】:

    标签: c# cqrs mediatr


    【解决方案1】:

    你需要把它分离出来,你混合Mediatr接口,例如:

    public class FindProducts : IRequest<IQueryable<Models.Product>>
    {}
    
    public class FindProductsHandler : IRequestHandler<FindProducts,IQueryable<Models.Product>>
    {}
    

    然后通过以下方式调用它:

    var query = new FindProducts();
    var products = await _mediator.Send(query);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-23
      • 1970-01-01
      • 2019-09-18
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      相关资源
      最近更新 更多