Ошибка MediatR: зарегистрируйте свои обработчики в контейнереC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Гость
 Ошибка MediatR: зарегистрируйте свои обработчики в контейнере

Сообщение Гость »


У меня есть приложение .Net Core, в котором я использую расширение .AddMediatR для регистрации сборки для моих команд и обработчиков

В ConfigurationServices в Startup.cs я использовал метод расширения из официального пакета MediatR.Extensions.Microsoft.DependencyInjection со следующим параметр:

startup.cs

Services.AddBLL(); DependencyInjection.cs

public static IServiceCollection AddBLL (это службы IServiceCollection) { Services.AddAutoMapper(Assembly.GetExecutingAssembly()); Services.AddMediatR(Assembly.GetExecutingAssembly()); Services.AddTransient(typeof(IPipelineBehavior), typeof(RequestPerformanceBehaviour)); Services.AddTransient(typeof(IPipelineBehavior), typeof(RequestValidationBehavior)); услуги возврата; } Класс обработчика команд выглядит следующим образом: ListEpostaHesaplariHandler.cs

публичный класс ListEpostaHesaplariRequest: IRequest { общественная модель FiltreEpostaHesaplariDto {get; набор; } } общедоступный класс ListEpostaHesaplariHandler: IRequestHandler { частный только для чтения IBaseDbContext _context; частный IMapper только для чтения _mapper; общедоступный ListEpostaHesaplariHandler (контекст IBaseDbContext, сопоставитель IMapper) { _контекст = контекст; _mapper = картограф; } public async Task Handle (запрос ListEpostaHesaplariRequest, CancellationToken cancelToken) { ждать Task.Delay(1); вар resultDataDto = новый ResultDataDto() {Status = ResultStatus.Success}; пытаться { вар foo = _context.EpostaHesaplari; вар filtreliEpostaHesaplari = Фильтр (request.Model, foo); var epostaHesaplariDto = _mapper.Map(filtreliEpostaHesaplari); resultDataDto.Result = epostaHesaplariDto; } поймать (Исключение ex) { РезультатДанныеДто.Статус = РезультатСтатус.Ошибка; resultDataDto.AddError(ex.Message); } вернуть результатDataDto; } Это контроллер, который я использовал MediatR

BaseController.cs

общедоступный абстрактный класс BaseController: Контроллер { частный IMediator _mediator; публичный статический int? биримИДД; защищенный IMediator Медиатор { получать { return _mediator ??= HttpContext.RequestServices.GetService(); } } } HomeController.cs

[HttpPost] общедоступная асинхронная задача MailGonderAsync() { FiltreEpostaHesaplariDto фильтр = новый FiltreEpostaHesaplariDto (); фильтр.Дурум = правда; вар req = новый ListEpostaHesaplariRequest () {Модель = фильтр}; вар ответ = ждут Mediator.Send(req); } пока проблем нет, ожидайте Mediator.Send(req); этот ответ приходит успешно

проблема начинается отсюда

send.cs (на уровне бизнес-логики класса)

публичный класс EmailSend: IEmailSingleSender { частный IMediator _mediator только для чтения; публичный EmailSend (медиатор IMediator) { _mediator = посредник ?? бросить новое ArgumentNullException(nameof(mediator)); } общедоступная асинхронная задача Отправить (EmailParamsDto emailParamsDto) { пытаться { FiltreEpostaHesaplariDto фильтр = новый FiltreEpostaHesaplariDto (); фильтр.Дурум = правда; вар req = новый ListEpostaHesaplariRequest () {Модель = фильтр}; вар ответ = ждут _mediator.Send(req); SmtpClient smtpClient = новый SmtpClient (); smtpClient.Порт = _emailSetting.Порт; smtpClient.Host = _emailSetting.Server; smtpClient.EnableSsl = _emailSetting.UseSsl; NetworkCredential networkCredential = новый NetworkCredential (); networkCredential.UserName = _emailSetting.UserName; networkCredential.Password = _emailSetting.Password; smtpClient.Credentials = networkCredential; MailMessage почта = новое MailMessage(); mail.IsBodyHtml = _emailSetting.IsHtml; mail.From = новый MailAddress(_emailSetting.UserName, emailParamsDto.Subject); mail.To.Add(новый MailAddress(emailParamsDto.Receiver)); //mail.CC.Add(_emailSetting.AdminMail); mail.Body = emailParamsDto.Body; mail.Subject = emailParamsDto.Subject; mail.Priority = emailParamsDto.MailPriority; дождитесь smtpClient.SendMailAsync(почта); } поймать (Исключение ex) { бросить бывшего; } } } Когда эта строка в методе Send выполняется, я получаю исключение:

var ответ = ожидайте _mediator.Send(req); Ошибка построения обработчика для запроса типа MediatR.IRequestHandler2[IUC.BaseApplication.BLL.Handlers.Yonetim.EpostaHesaplariHandlers.ListEpostaHesaplariRequest,IUC.BaseApplication.COMMON.Models.ResultDataDto1[System.Collections.Generic.List`1[IUC.BaseApplication .BLL.Models.Yonetim.EpostaHesaplariDto.ListEpostaHesaplariDto]]]. Зарегистрируйте свои обработчики в контейнере. Посмотрите примеры на GitHub для примеров.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»