问题标签 [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.

0 投票
1 回答
1196 浏览

generics - Mediatr - 前/后处理器专业化

我目前正在修改我们的 asp.net 核心应用程序中的一些大型控制器。为此,我们选择了 Mediatr,我们目前正在将这些大动作拆分为处理程序和前/后处理器。

我们的一些命令需要触发内部通知系统(node.js 服务)。为此,我开发了一个负责通知事件服务的后处理器。但是,我只想为从interface继承的命令INotify“触发”它。换句话说,Mediatr 会加载所有前置/后置处理器,但它只会触发其命令类型与通用约束匹配的那些。最后它看起来像这样:

如果命令没有从 INotifyCommand 继承,则不会触发此后处理器。

预处理器也是如此。例如,我需要我的预处理器为某些特定命令添加一些额外的数据。

目前我所做的很糟糕,我相信有更好的方法。

由于我使用的是默认的 asp.net 核心依赖注入引擎 +MediatR.Extensions.Microsoft.DependencyInjection包,因此我没有直接注册 Post & Pre 处理器。

我必须承认我在这里有点迷路了。关于如何改进这个系统的任何想法?

谢谢你,塞巴斯蒂安

0 投票
0 回答
752 浏览

asp.net-core - MediatR 3.0.1 可能的错误?无法让 IAsyncRequestHandler 工作

使用 IAsyncRequestHandler 执行 IRequest 时收到以下错误消息。

这就是我在启动类中注册它的方式

创建用户请求和响应

请求处理程序

控制器类

错误发生在控制器类内部,它没有命中异步请求处理程序。

DI注册有什么问题吗?我查看了这些示例,但找不到任何特定于 aspnet 核心的内容。

0 投票
1 回答
423 浏览

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();启用了它看起来像这样。

但这是意料之中的。

那么发生了什么?为什么DataExceptionDapper 没有按预期工作?

0 投票
0 回答
31 浏览

c# - 使用 AsyncRequestHandler 的异步 API 方法线程太多?

我想我的问题归结为:

给定两个异步方法,其中一个调用另一个。我应该在这两种方法中等待,还是只在第一种方法中等待?

这是我的场景。我正在使用 CQRS 和 MediatR 编写一个 ASP NET CORE WEB API。

我有这个异步 API 方法

我还应该在我的 中异步/等待RequestHandler吗?像这样

或者我应该简单地这样做

我感到困惑的原因是因为API请求已经在一个线程中。那么将它包装在另一个线程中不是正确的方法吗?我看过这两个例子:/

0 投票
1 回答
742 浏览

c# - 依赖注入与继承

我正在使用带有 MediatR 的管道构建。我正在添加一个旨在验证查询和命令的简单行为:

目前我的大部分查询都继承自 PaginatedQuery。

例子:

为了确保用户不会发送无效的偏移量/限制,我构建了以下验证器:

不幸的是,即使 TRequest 是从 PaginatedQuery 继承的,这个验证器也没有注入到我的 ValidationBehavior 中。

最后,我需要为当前的 TRequest 和所有母类(即:PaginatedQuery)注入验证器。

这是可以实现的吗?

注意:要注入验证器,我会扫描所有实现 IValidator<> 的类型(使用 Scrutor)

编辑:我忘了提到我正在使用 AutoFac

0 投票
0 回答
1194 浏览

c# - 将 MediatR 请求动态应用于对象

我正在尝试在我的 web api 应用程序中使用 MediatR。我的要求是,当请求到达时,它应该针对可变数量的实例执行。例如,假设我有一个CreateRequest命令,并且根据请求的输入,该命令应该针对两个对象ATypeBType. 通过创建一个简单的处理程序,如以下示例所示

确定在哪些对象上应用命令将是处理程序的责任?

编辑

根据@Aaron 的要求,这里是我想要实现的示例。假设我有一个启用/禁用组件的 api。实际上有许多组件可用,api 应该能够根据接收到的输入禁用单个组件或一组组件。

TRequest并且TResponse对于每个处理程序都是平等的,因为所有组件都实现相同的接口。

出于这个原因,我有一组命令/处理程序,每个都禁用一个组件。但是我想避免每个处理程序都实现并运行。相反,我只希望中介将请求发送到请求输入中标识的那些组件。

0 投票
1 回答
1685 浏览

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

0 投票
0 回答
1005 浏览

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让我知道是否需要任何其他信息。

0 投票
1 回答
652 浏览

c# - 在 autofac 中注册处理程序

Autofac 和 MediatR 正在使用中。我正在尝试在 ContainerBuilder 中注册处理程序,但它总是错误

无法为服务类型 'MediatR.IRequestHandler'2[DataSourceQuery'2[TEntity,TModel],Kendo.Mvc.UI.DataSourceResult]' 实例化实现类型 'DataSourceHandler`2[TEntity,TModel]'

我的查询:

处理程序:

我尝试以不同的方式注册它,例如:

但它不起作用。

我应该怎么办?

0 投票
1 回答
666 浏览

c# - 如何使用 Simple Injector 注册嵌套的泛型类型?

使用 Mediatr,我有以下请求处理程序:

我在我的 IoC 中注册此通用请求处理程序时遇到问题。我试过像这样注册:

这给了我错误:

System.ArgumentException:提供的类型 GetEntityByIdRequest<TEntity> 未实现 IRequestHandler<TRequest, TResponse>。参数名称:服务类型

我也看过与我遇到的问题相同,但该人使用的是 StructureMap 而不是 Simple Injector。

有人可以帮我注册我的通用请求处理程序。