MediatR 在 IIS 上找不到处理程序

Posted

技术标签:

【中文标题】MediatR 在 IIS 上找不到处理程序【英文标题】:MediatR not finding Handlers on 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 下载发布配置文件并手动部署来实现 将您的代码添加到问题中:处理程序类、查询、注册以及如何调用它。 【参考方案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】:

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

【讨论】:

你是如何解决这个问题的?能否请您提及一些细节? 最初我已经设置了我的启动,所以我的处理程序首先注册,然后我为我的实体框架添加了依赖注入。切换它们最终就足够了

以上是关于MediatR 在 IIS 上找不到处理程序的主要内容,如果未能解决你的问题,请参考以下文章

错误:在 Discord Bot 的命令处理程序上找不到模块

iis7.5找不到FastCgi设置,该怎么处理

ASP.NET MVC 在 Windows Server 2016 上找不到控制器

iis7.5找不到FastCgi设置,该怎么处理

颤振驱动程序:在屏幕上找不到元素(文本)

rails 应用程序在 heroku 上找不到 fontawesome 图标