gpt4 book ai didi

c# - MediatR 错误 : Register your handlers with the container

转载 作者:行者123 更新时间:2023-12-04 15:16:44 25 4
gpt4 key购买 nike

我有一个 .Net Core 应用程序,我在其中使用 .AddMediatR 扩展名为我的命令和处理程序注册程序集

In ConfigureServices in Startup.cs i have used the extension methodfrom the official packageMediatR.Extensions.Microsoft.DependencyInjection with the followingparameter:

startup.cs

 services.AddBLL();

DependencyInjection.cs

public static IServiceCollection AddBLL(this IServiceCollection services)
{
services.AddAutoMapper(Assembly.GetExecutingAssembly());
services.AddMediatR(Assembly.GetExecutingAssembly());
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(RequestPerformanceBehaviour<,>));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(RequestValidationBehavior<,>));

return services;
}

commandhandler类如下:ListEpostaHesapariHandler.cs

public class ListEpostaHesaplariRequest : IRequest<ResultDataDto<List<ListEpostaHesaplariDto>>>
{
public FiltreEpostaHesaplariDto Model { get; set; }
}

public class ListEpostaHesaplariHandler : IRequestHandler<ListEpostaHesaplariRequest, ResultDataDto<List<ListEpostaHesaplariDto>>>
{
private readonly IBaseDbContext _context;
private readonly IMapper _mapper;

public ListEpostaHesaplariHandler(IBaseDbContext context, IMapper mapper)
{
_context = context;
_mapper = mapper;
}

public async Task<ResultDataDto<List<ListEpostaHesaplariDto>>> Handle(ListEpostaHesaplariRequest request, CancellationToken cancellationToken)
{
await Task.Delay(1);

var resultDataDto = new ResultDataDto<List<ListEpostaHesaplariDto>>() { Status = ResultStatus.Success };

try
{
var foo = _context.EpostaHesaplari;

var filtreliEpostaHesaplari = Filtre(request.Model, foo);

var epostaHesaplariDto = _mapper.Map<List<ListEpostaHesaplariDto>>(filtreliEpostaHesaplari);

resultDataDto.Result = epostaHesaplariDto;
}
catch (Exception ex)
{
resultDataDto.Status = ResultStatus.Error;
resultDataDto.AddError(ex.Message);
}

return resultDataDto;
}

这是我使用 MediatR 的 Controller

BaseController.cs

  public abstract class BaseController : Controller
{
private IMediator _mediator;
public static int? birimIDD;
protected IMediator Mediator
{
get
{
return _mediator ??= HttpContext.RequestServices.GetService<IMediator>();
}
}
}

HomeController.cs

[HttpPost]
public async Task<IActionResult> MailGonderAsync()
{

FiltreEpostaHesaplariDto filtre = new FiltreEpostaHesaplariDto();
filtre.Durum = true;
var req = new ListEpostaHesaplariRequest() { Model = filtre };
var response = await Mediator.Send(req);
}

no problem so far await Mediator.Send(req); this response is coming successfully

问题从这里开始

send.cs(在类业务逻辑层)

public class EmailSend : IEmailSingleSender
{
private readonly IMediator _mediator;

public EmailSend(IMediator mediator)
{
_mediator = mediator ?? throw new ArgumentNullException(nameof(mediator));

}

public async Task Send(EmailParamsDto emailParamsDto)
{
try
{
FiltreEpostaHesaplariDto filtre = new FiltreEpostaHesaplariDto();
filtre.Durum = true;
var req = new ListEpostaHesaplariRequest() { Model = filtre };
var response = await _mediator.Send(req);

SmtpClient smtpClient = new SmtpClient();
smtpClient.Port = _emailSetting.Port;
smtpClient.Host = _emailSetting.Server;
smtpClient.EnableSsl = _emailSetting.UseSsl;
NetworkCredential networkCredential = new NetworkCredential();
networkCredential.UserName = _emailSetting.UserName;
networkCredential.Password = _emailSetting.Password;
smtpClient.Credentials = networkCredential;
MailMessage mail = new MailMessage();
mail.IsBodyHtml = _emailSetting.IsHtml;
mail.From = new MailAddress(_emailSetting.UserName, emailParamsDto.Subject);
mail.To.Add(new MailAddress(emailParamsDto.Receiver));
//mail.CC.Add(_emailSetting.AdminMail);
mail.Body = emailParamsDto.Body;
mail.Subject = emailParamsDto.Subject;
mail.Priority = emailParamsDto.MailPriority;

await smtpClient.SendMailAsync(mail);
}
catch (Exception ex)
{

throw ex;
}
}
}

当这行在 Send 方法中执行时,我得到了异常:

var response = await _mediator.Send(req); 

Error constructing handler for request of typeMediatR.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]]].Register your handlers with the container. See the samples in GitHubfor examples.

最佳答案

services.AddMediatR(Assembly.GetExecutingAssembly());

你所有的处理程序和命令都在你传递的这个程序集中?

关于c# - MediatR 错误 : Register your handlers with the container,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64200273/

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