gpt4 book ai didi

c# - 该程序无法找到 MediatR 查询 ASP.Net Core 的处理程序

转载 作者:行者123 更新时间:2023-11-30 21:28:31 27 4
gpt4 key购买 nike

我正在为查询对象使用 ASP.Net Core 2.2 和 MediatR 框架/库。当我运行程序时,我遇到了这个异常:

InvalidOperationException: Handler was not found for request of type MediatR.IRequestHandler2[Store.Core.Queries.GetProductTypesQuery,System.Collections.Generic.IEnumerable1[Store.Core.DomainModels.ProductType]]. Register your handlers with the container.

我将这些打包添加到我的 Store 项目(主项目)

1-MediatR 7.0.0

2- MediatR.Extensions.Microsoft.DependencyInjection

这是我的Startup.cs

services.AddMediatR(typeof(Startup));

所以这是我的查询(位于名为“Store.Core”的项目中)

namespace Store.Core.Queries.Products
{
public class GetProductTypesQuery : IRequest<IEnumerable<ProductType>> { }
}

这是我的QueryHandler(位于另一个名为“Store.Data”的项目中)

namespace Data.Queries.Products
{
public class GetProductTypesQueryHandler : IRequestHandler<GetProductTypesQuery, IEnumerable<ProductType>>
{
private ApplicationDbContext _context;
public GetProductTypesQueryHandler(ApplicationDbContext context)
{
_context = context;
}

public async Task<IEnumerable<ProductType>> Handle(GetProductTypesQuery request, CancellationToken cancellationToken)
{
return await _context.ProductType.OrderBy(p => p.ProductTypeID).ToListAsync();
}

}
}

这是我用MediatR的Controller

namespace Store.Controllers
{
public class HomeController : Controller
{
private readonly IMapper _mapper;
private readonly IMediator _mediator;
public HomeController(IMapper mapper, IMediator mediator)
{
_mapper = mapper;
_mediator = mediator;
}


public IActionResult Home() => View();

[HttpGet]
public async Task<IActionResult> Dishes(GetProductTypesQuery query) {
var productTypes = await _mediator.Send(query);
var productTypesViewModel = _mapper.Map<IEnumerable<ProductTypeVM>>(productTypes);
return View(productTypesViewModel);
}
}
}

我的 ProductType 模型(我认为没有必要,但我添加它是为了提供完整信息)

namespace Store.Core.DomainModels
{
public class ProductType
{
public int ProductID { get; set; }
public string ProductName { get; set; }
}
}

对我来说唯一可疑的部分是 StartUp.cs(因为我在不同的项目中有查询和查询处理程序)但我不知道我错过了什么。

最佳答案

如我所料,问题出在您添加 MediatR 服务的 Startup.cs 中。由于我的处理程序位于单独的程序集中,因此我们应该提及该程序集名称。我在 Startup.cs 中更改了这个

public void ConfigureServices(IServiceCollection services) {
services.AddMediatR(typeof(Startup));
}

对此:

public void ConfigureServices(IServiceCollection services){
var assembly = AppDomain.CurrentDomain.Load("Data");
services.AddMediatR(assembly);
}

这里的“Data”是我的程序集的名称,所有处理程序都存储在那里。

关于c# - 该程序无法找到 MediatR 查询 ASP.Net Core 的处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56415440/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com