Ошибка MediatR: зарегистрируйте свои обработчики в контейнере ⇐ 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 для примеров.
У меня есть приложение .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 для примеров.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Зарегистрируйте асинхронный фабричный метод с параметрами в контейнере DI ASP.NET Core.
Anonymous » » в форуме C# - 0 Ответы
- 29 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Mlflow не копирует свои артефакты в папку Mlruns при использовании в контейнере
Anonymous » » в форуме Python - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-