При выполнении метода API с использованием MediatR, появляется ошибка - PullRequest
3 голосов
/ 28 января 2020

Я впервые использую Mediator, но теперь я получаю следующую ошибку при вызове метода API:

ОШИБКА

{"error":"Enumerator failed to MoveNextAsync."}

DI

services.AddMediatR(Assembly.GetExecutingAssembly());
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(RequestValidationBehavior<,>));

Базовый API

[ApiController]
[Route("api/[controller]")]
public abstract class ApiController : ControllerBase
{
    private IMediator _mediator;

    protected IMediator Mediator => _mediator ??= HttpContext.RequestServices.GetService<IMediator>();
}

API

[HttpGet]
[Route("client/{clientId}/template/list")]
public async Task<ActionResult<TemplateListDTO>> GetClientTemplateList(long clientId)
{
    return await Mediator.Send(new GetClientTemplateListQuery { ClientId = clientId });
}

Я использую Do tNet ядро 3.1

Ответы [ 2 ]

1 голос
/ 28 января 2020

Проблема описана здесь:

https://github.com/jbogard/MediatR/issues/317

Ах. Вы не можете делать типовые ограничения c с ванильным MS.Extensions.DI. Смотрите мой PR, чтобы исправить это: https://github.com/aspnet/DependencyInjection/pull/635

Сделайте что-то вроде следующего:

services.AddScoped(typeof(IPipelineBehavior<CustomerAddRequest, CommandResponse>), typeof(CustomerAddBehavior<CustomerAddRequest, CommandResponse>));
services.AddScoped(typeof(IPipelineBehavior<BrandDeleteRequest, CommandResponse>), typeof(BrandDeleteBehavior<BrandDeleteRequest, CommandResponse>));
services.AddScoped(typeof(IPipelineBehavior<CustomerDeleteRequest, CommandResponse>), typeof(CustomerDeleteBehavior<CustomerDeleteRequest, CommandResponse>));
0 голосов
/ 29 января 2020

Я нашел проблему, это было не с Mediator. В конвейере возникла исключительная ситуация, которая была обработана неправильно и не смогла go перейти к следующему () конвейеру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...