[![enter image description here][1]][1]Im using asp.net core .net 6 and MediatR 12.0.1 and i'm not using on purpose MediatR.Extensions.Microsoft.DependencyInjection which is deprecated. In my Program.cs file i have:
builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly()));
And when im trying to ese MediatR i have error
No service for type 'MediatR.IRequestHandler' has been registred
hire in order controller i have this error:
// GET: api/Orders
[HttpGet]
public async Task<ActionResult<IEnumerable<OrderDto>>> GetOrders()
{
return await Mediator.Send(new GetOrderListQuery()); //error hire
}
MediatR is used in controller like that:
namespace Api.Controllers
{
[ApiController]
public class BaseApiController : ControllerBase
{
private ISender _mediator = null!;
protected ISender Mediator => _mediator ??= HttpContext.RequestServices.GetRequiredService<ISender>();
}
}
and my Ordercontroller inherits BaseApiController
What im doing wrong?
[EDIT 1]: One important thing is that my Queries Commands and Handlers exists in second project called Application. It is working when I used this registration:
builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblies(
typeof(GetOrderListHandler).Assembly,
typeof(GetOrderListQuery).Assembly
));
How can I do it automaticly? Project structure: [1]: https://i.stack.imgur.com/HZbA7.png
[EDIT 2]: I found quite good solution after many tests, you have to point one Class from assembly and MedaitR will register all:
builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining<GetOrderListHandler>(
));