问题标签 [mediatr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - MediatR、泛型和 NET Core 依赖注入 - 无法实例化处理程序
我正在构建应用程序并尝试使用 MediatR 实现域事件。我在使用 MediatR 4.0.0 的 .NET Core 2.1(预览版,但我认为这不是问题)
我正在使用 eShopOnContainers/Ordering 服务的示例。他们使用 Autofac,但我更愿意坚持使用使用MediatR 扩展的本机 DI 容器
我的应用程序在启动时崩溃了。错误:
System.ArgumentException: '无法为服务类型实例化实现类型'MyProject.API.Application.Commands.IdentifierCommandHandler`2[T,R]'
'MediatR.IRequestHandler
2[MyProject.API.Application.Commands.IdentifiedCommand
> 2[T,R],R]'。
我的 Nuget 包:
尝试注册 IdentifiedCommandHandler 时,我的应用程序在启动时崩溃:
我将不胜感激。我不得不对其进行一些更改以使其与当前的 MediatR 兼容,因此我使用 IRequestHandler 而不是 IAsyncRequestHandler,因为它不再存在。
c# - C#如何聚合来自多个HTTP请求的结果?
我正在设计一个用 C# 和 AspNetCore 编写的应用程序,它需要向微服务发出多个 HTTP 请求并在返回控制器之前聚合结果。
我研究过 MediatR 管道,但似乎有限且不适合这种特定情况。
我想在 map 和 reduce 领域中会有一些有用的东西,但很难找到我的开发人员可以快速使用的框架。
我们希望确保在一个或多个请求失败时终止聚合。
我使用工作线程创建了一个概念证明,例如
但这并没有提供像 MediatR 开发人员可以轻松采用和单元测试的框架。
如果我的概念证明是使用 Rx 扩展和 Observable.zip 编写的,我想也可以这么说。尽管如此,我还是很好奇,并希望找到在 C# 中使用 Observable.zip 的示例,类似于此 Netflix 博客文章中所展示的示例
c# - 在现有框架中调整/包装 MediatR 通知
TL;DR 如何调整现有的一组事件/通知和相关处理程序,以便 MediatR 可以使用它们,而不必为每种现有类型实现额外的处理程序和通知?
长版:我们目前有一个调度事件的系统,我们使用总线实现来进行实际的传输。
我目前正在试验一个进程内变体。与 MediatR 非常相似,INotification
我们有一个标记界面与 MediatRIEvent
类似,INotificationHandler<in INotification>
我们有一个IEventHandler<in IEvent>
我们使用 Autofac 来注册我们的 EventHandlers,然后我们在实际消费总线上的东西时会进行一些反射。
我想做但无法理解的事情是实现某种通用适配器/包装器,以便我可以保留现有的事件和事件处理程序,并在从 MediatR 分派通知时使用它们,基本上减少了更改量让我现有的代码围绕设置容器展开。
在代码方面,我希望以下类的行为就像它使用 MediatR 接口一样。
有什么建议么?
.net-core - 如何将 MediatR 与我的业务层分离
早上好。
我在我的项目中使用域事件,我发现实现它的最简单方法是使用 MediatR。但我不希望我的项目直接依赖它,我想应用依赖反转来隐藏库。
由于 INotification 接口,在 Mediator 中具有依赖关系的当前代码
但我想成为这样:
通过某种方式,我需要将中介事件/事件处理程序“转换”为我的项目事件/事件处理程序。
最好的方法是什么。提前致谢。
.net - 在 Windows 服务应用程序中使用 MediatR 和 CQRS
我已经看到 MediatR 和 CQRS 的组合主要用于 Web 项目(特别是在 MVC 项目中)。我们可以毫无问题地在控制器操作中调用MediatR的Send方法。
是否适合在 Windows 服务应用程序中使用这种组合?我找不到任何在 Windows 服务应用程序中使用 MediatR 和 CQRS 的文章。
asp.net - 使用 CQRS 模式在 API 中返回有意义的错误
在使用 Mediatr 模式时,我发现将有意义的错误返回给 API 控制器非常具有挑战性。让我们以OrdersController.CancelOrder
方法为例(src)。
在此示例中,它们“仅”返回Ok()
and BadRequest()
。在这种情况下,他们将如何返回诸如“此 orderid 不存在”(404)或“此订单已发货”(400)(...)之类的错误。
我们可以引入一个新类,称为Result
保存返回值(如果有的话)和潜在的错误消息。在这种情况下,您的所有命令、查询都应该返回Result<YourModel>
. 我们也可以直接在控制器中添加代码。我无法下定决心,两种解决方案都有优点和缺点。
你怎么看?
谢谢 Seb
autofac - 无法解析参数“MediatR.ServiceFactory serviceFactory”(MediatR with Autofac)
我正在尝试在 .NET Framework 4.6.2 中使用 Autofac 运行 MediatR。
我的注册:
我的控制器:
当我尝试使用此 api 方法时,我收到以下错误:在类型 'MediatR.Mediator' 上找到的具有 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' 的构造函数都不能使用可用的服务和参数调用:\ r\n无法解析构造函数“Void .ctor(MediatR.ServiceFactory)”的参数“MediatR.ServiceFactory serviceFactory”
wiki ( https://github.com/jbogard/MediatR/wiki ) 要求我们注册 SingleInstanceFactory 和 MultiInstanceFactory。但 Visual Studio 无法解析这些符号中的任何一个。
如何解决此问题以使 MediatR 与 Autofac 一起使用?
c# - ASP.NET Core MediatR 错误:向容器注册处理程序
我有一个 .Net Core 应用程序,我使用.AddMediatR
扩展程序按照 CQRS 方法为我的命令和处理程序注册程序集。
在 Startup.cs 的 ConfigureServices 中,我使用了官方包中的扩展方法,并MediatR.Extensions.Microsoft.DependencyInjection
带有以下参数:
命令和命令处理程序类如下:
添加教育命令.cs
添加EducationCommandHandler.cs
当我运行执行简单await _mediator.Send(command);
代码的 REST 端点时,我从日志中收到以下错误:
我试图浏览文档中的官方示例,但没有任何运气。有谁知道我如何配置 MediatR 才能正常工作?提前致谢。
c# - 用 MediatR 替换服务层 - 值得吗?
您认为用 MediatR 替换我的服务层或服务类是否合理?例如,我的服务类如下所示:
我想实现某种模块化设计,以便其他动态加载的模块或插件可以为我的主要核心应用程序编写自己的通知或命令处理程序。
目前,我的应用程序根本不是事件驱动的,动态加载的插件也没有简单的通信方式。
我可以将 MediatR 合并到我的控制器中,完全删除服务层,或者将它与我的服务层一起使用,只是发布通知,以便我的插件可以处理它们。
目前,我的逻辑主要是 CRUD,但在创建、更新、删除之前有很多自定义逻辑。
可能替换我的服务如下所示:
会不会做错事?
基本上,我正在努力为我的逻辑流程选择什么:
- 控制器 -> 服务 -> MediatR -> 通知处理程序 -> 存储库
- 控制器 -> MediatR -> 命令处理程序 -> 存储库
似乎使用 MediatR,我不能有一个用于创建、更新和删除的模型,所以重用它的一种方法是我需要派生如下请求:
或将其嵌入我的命令中,例如:
MediatR 的一个优点是能够轻松插入和拔出逻辑,这似乎非常适合模块化架构,但我仍然有点困惑如何用它来塑造我的架构。
c# - CQRS 与 MediatR 和命令的可重用性
创建只包含对象的命令是否有意义?例如:
或者可能是这样的(推导):
或者命令/请求本身应该被视为 DTO?我很困惑,因为我看到了很多做事的方法。将所有属性复制到命令/请求类听起来也不是一件好事。
你如何在你的项目中做到这一点?
你是直接将你的命令映射到你的领域模型,还是仅仅为了传递 DTO 而使用命令?
如果使用 MVC 框架,我的控制器操作的输入应该是什么?它应该是一个命令,还是应该在我的操作实现中创建命令并发送它?(我想这将取决于我如何建模我的命令)