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 的命令处理程序上找不到模块