【问题标题】:MediatR not finding Handlers on IISMediatR 在 IIS 上找不到处理程序
【发布时间】:2020-03-14 16:45:12
【问题描述】:

我正在 .NET Core 3.0 中编写一个具有不同层的简单应用程序,并使用 MediatR 使我的代码更简洁。 我有 5 个不同的层:API、Application、Application.IO、Domain 和 Infrastructure,我的 IRequestHandler 在 Application 中,IRequest 在 Application.IO 中,注册我的处理程序发生在 API 层的 Startup 类中。

在本地运行时我没有问题,但是当我将它部署到 IIS 服务器时,我不断收到错误:

为请求类型构建处理程序时出错 MediatR.IRequestHandler`2[WerfRegistratie.Application.IO.Queries.GetPersonQuery,WerfRegistratie.Application.IO.Queries.GetPersonQueryResponse]。 向容器注册您的处理程序。查看 GitHub 中的示例 例如。

【问题讨论】:

  • 展示你如何注册处理程序,即你的ConfigureServices。并描述您如何发布网站。
  • 一开始我只是用了这个 services.AddMediatR(typeof(CreatePersonCommandHandler).GetTypeInfo().Assembly);但从那以后我尝试了多种其他方式(包括添加启动)。发布只是通过从 azure 下载发布配置文件并手动部署来实现
  • 将您的代码添加到问题中:处理程序类、查询、注册以及如何调用它。

标签: c# asp.net .net-core mediatr


【解决方案1】:

要注册 Mediatr,您可以使用:

services.AddMediatR(typeof(Startup);

要注册您的处理程序,您可以使用:

services.AddMediatorHandlers(typeof(CreatePersonCommandHandler).GetTypeInfo().Assembly);

这两者都应该存在于您的 startup.cs 文件中的 ConfigureServices 方法中

public void ConfigureServices(IServiceCollection services){
    services.AddMediatR(typeof(Startup);
 services.AddMediatorHandlers(typeof(CreatePersonCommandHandler).GetTypeInfo().Assembly);
}

【讨论】:

    【解决方案2】:

    经过大量搜索后,问题似乎不在于处理程序的注册(这是正确的),而是在我的处理程序中对存储库进行依赖注入。修复此问题后,一切都按预期工作

    【讨论】:

    • 你是如何解决这个问题的?能否请您提及一些细节?
    • 最初我已经设置了我的启动,所以我的处理程序首先注册,然后我为我的实体框架添加了依赖注入。切换它们最终就足够了
    猜你喜欢
    • 2020-12-08
    • 2021-01-06
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 2020-01-24
    • 2019-07-02
    • 2021-06-22
    • 2021-08-24
    相关资源
    最近更新 更多