问题标签 [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.
generics - Mediatr - 前/后处理器专业化
我目前正在修改我们的 asp.net 核心应用程序中的一些大型控制器。为此,我们选择了 Mediatr,我们目前正在将这些大动作拆分为处理程序和前/后处理器。
我们的一些命令需要触发内部通知系统(node.js 服务)。为此,我开发了一个负责通知事件服务的后处理器。但是,我只想为从interface继承的命令INotify
“触发”它。换句话说,Mediatr 会加载所有前置/后置处理器,但它只会触发其命令类型与通用约束匹配的那些。最后它看起来像这样:
如果命令没有从 INotifyCommand 继承,则不会触发此后处理器。
预处理器也是如此。例如,我需要我的预处理器为某些特定命令添加一些额外的数据。
目前我所做的很糟糕,我相信有更好的方法。
由于我使用的是默认的 asp.net 核心依赖注入引擎 +MediatR.Extensions.Microsoft.DependencyInjection
包,因此我没有直接注册 Post & Pre 处理器。
我必须承认我在这里有点迷路了。关于如何改进这个系统的任何想法?
谢谢你,塞巴斯蒂安
asp.net-core - MediatR 3.0.1 可能的错误?无法让 IAsyncRequestHandler 工作
使用 IAsyncRequestHandler 执行 IRequest 时收到以下错误消息。
这就是我在启动类中注册它的方式
创建用户请求和响应
请求处理程序
控制器类
错误发生在控制器类内部,它没有命中异步请求处理程序。
DI注册有什么问题吗?我查看了这些示例,但找不到任何特定于 aspnet 核心的内容。
c# - 使用 MediatR 时来自 Dapper 的 DataException 消失
我有一个奇怪的问题,DataExceptions
来自 Dapper 没有正确地正确处理。
这是我的设置:
结果
curl
curl -X GET ' http://localhost:5000/api/Customer '
请求 URL
http://localhost/api/Customer
响应正文
无内容
响应码
500
预期的
我期待 500 有错误描述,而不是没有内容。
这是抛出的异常:
如果我将Handle
方法更改为:
我得到了预期的结果。500 错误提示“发生了什么事?”
因为我app.UseDeveloperExceptionPage();
启用了它看起来像这样。
但这是意料之中的。
那么发生了什么?为什么DataException
Dapper 没有按预期工作?
c# - 使用 AsyncRequestHandler 的异步 API 方法线程太多?
我想我的问题归结为:
给定两个异步方法,其中一个调用另一个。我应该在这两种方法中等待,还是只在第一种方法中等待?
这是我的场景。我正在使用 CQRS 和 MediatR 编写一个 ASP NET CORE WEB API。
我有这个异步 API 方法
我还应该在我的 中异步/等待RequestHandler
吗?像这样
或者我应该简单地这样做
我感到困惑的原因是因为API请求已经在一个线程中。那么将它包装在另一个线程中不是正确的方法吗?我看过这两个例子:/
c# - 依赖注入与继承
我正在使用带有 MediatR 的管道构建。我正在添加一个旨在验证查询和命令的简单行为:
目前我的大部分查询都继承自 PaginatedQuery。
例子:
为了确保用户不会发送无效的偏移量/限制,我构建了以下验证器:
不幸的是,即使 TRequest 是从 PaginatedQuery 继承的,这个验证器也没有注入到我的 ValidationBehavior 中。
最后,我需要为当前的 TRequest 和所有母类(即:PaginatedQuery)注入验证器。
这是可以实现的吗?
注意:要注入验证器,我会扫描所有实现 IValidator<> 的类型(使用 Scrutor)
编辑:我忘了提到我正在使用 AutoFac
c# - 将 MediatR 请求动态应用于对象
我正在尝试在我的 web api 应用程序中使用 MediatR。我的要求是,当请求到达时,它应该针对可变数量的实例执行。例如,假设我有一个CreateRequest
命令,并且根据请求的输入,该命令应该针对两个对象AType
和BType
. 通过创建一个简单的处理程序,如以下示例所示
确定在哪些对象上应用命令将是处理程序的责任?
编辑
根据@Aaron 的要求,这里是我想要实现的示例。假设我有一个启用/禁用组件的 api。实际上有许多组件可用,api 应该能够根据接收到的输入禁用单个组件或一组组件。
TRequest
并且TResponse
对于每个处理程序都是平等的,因为所有组件都实现相同的接口。
出于这个原因,我有一组命令/处理程序,每个都禁用一个组件。但是我想避免每个处理程序都实现并运行。相反,我只希望中介将请求发送到请求输入中标识的那些组件。
c# - 中介管道行为注册
我有一个带有 Mediatr 3.0.1 和 structureMap.Microsoft.DependencyInjection 1.4.0 的 asp.net 核心 web api 项目。
我想使用预处理和后处理行为。IPipelineBehavior 按预期工作,但那些 2 没有:
容器注册:
错误说:
ArgumentOutOfRangeException:指定的参数超出了有效值的范围。参数名称:具有 ReturnType PostProcessingBehavior 的实例“PostProcessingBehavior”不能转换为 IPipelineBehavior
这是来自示例: https ://github.com/jbogard/MediatR/blob/master/samples/MediatR.Examples.StructureMap/Program.cs
c# - MediatR - 使用 Unity 注册 IPipelineBehaviors
我目前正在尝试使用 Unity IoC 容器作为依赖解析器在我的 ASP.Net 项目中设置 MediatR。我想使用RequestPostProcessorBehavior<,>
来处理某些事件的一些后果(例如,发送电子邮件或在客户端应用程序中输出通知)。
我一直在使用 GitHub 上的 MediatR 示例中的代码来注册相关的处理程序(https://github.com/jbogard/MediatR/blob/master/samples/MediatR.Examples.Unity/Program.cs)。有没有一种好方法可以为我可能注册RequestPostProcessorBehavior<,>
的任意数量注册一个?IRequestHandlers
让我知道是否需要任何其他信息。
c# - 在 autofac 中注册处理程序
Autofac 和 MediatR 正在使用中。我正在尝试在 ContainerBuilder 中注册处理程序,但它总是错误
无法为服务类型 'MediatR.IRequestHandler'2[DataSourceQuery'2[TEntity,TModel],Kendo.Mvc.UI.DataSourceResult]' 实例化实现类型 'DataSourceHandler`2[TEntity,TModel]'
我的查询:
处理程序:
我尝试以不同的方式注册它,例如:
但它不起作用。
我应该怎么办?
c# - 如何使用 Simple Injector 注册嵌套的泛型类型?
使用 Mediatr,我有以下请求处理程序:
我在我的 IoC 中注册此通用请求处理程序时遇到问题。我试过像这样注册:
这给了我错误:
System.ArgumentException:提供的类型 GetEntityByIdRequest<TEntity> 未实现 IRequestHandler<TRequest, TResponse>。参数名称:服务类型
我也看过这与我遇到的问题相同,但该人使用的是 StructureMap 而不是 Simple Injector。
有人可以帮我注册我的通用请求处理程序。