问题标签 [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 回答
1023 浏览

c# - 为所有传入请求提供一个 Request/RequestHandler

在我当前的项目中,我一直在使用MediatR并取得了很大的成功。使用中介管道来解决横切关注点的想法非常好。

我没有得到的一件事(也许原因是我缺乏对 c# covariance/contravariance的了解)是如何在单个处理程序中处理所有传入请求?无论请求的类型如何,我都想在执行请求之前执行一个操作:

或者

我得到了 Jimmy 关于 PreRequestHandler 的说法,但是我无法为所有请求实现一个单独的请求,因为它们总是被键入(我可以为我拥有的每个 IRequest 实现一个 IPreRequest,但这听起来不对)...... .

请问有什么想法吗?

0 投票
5 回答
35433 浏览

c# - 带有 ASP.NET Core DI 的 MediatR

我正在使用新的 ASP.NET Core,目前正在创建一个我想从 JavaScript 前端调用的 API。

我想使用调解器模式来减少耦合,我从 Jimmy Bogard找到了 Library MediatR 。

我的问题在于使用 DI 中的构建将其连接起来,我尝试查看示例,但看不到它如何绑定到启动类中的 ConfigureServices 方法。

有人有任何见解吗?

更新:我得到了它的工作,从我的 ConfigureService 方法:

0 投票
1 回答
831 浏览

structuremap - ViewModels 作为带有 MediatR、StructureMap、Caliburn.Micro 的处理程序

我们将 Caliburn.Micro 用于我们的 MVVM 框架,将 StructureMap 用于我们的 IoC 容器,并将 MediatR 用于我们的中介器实现。这一切都很好,除了注册 MediatR 事件处理程序的推荐方法与 Caliburn.Micro 推荐的使用 ViewModels 作为它们自己的处理程序的方法不能很好地配合。

Caliburn.Micro 通过 EventAggregator 实现中介者模式,这要求您将 IEventAggregator 注入 ViewModel 并订阅自身(或实现 IHandle<> 接口的东西)。MediatR 采用更加解耦的方法,建议您反射性地扫描程序集以查找关闭 IRequestHandler<,> 和其他类型的类型。

我相信我缺乏使用 StructureMap 的经验是我的问题。

我想做的是能够在 ViewModel 本身上实现 Handler 功能(如 Caliburn.Micro 建议的那样),但也确保 ViewModel 被注册为 Caliburn.Micro 的 Singletons。

当 StructureMap 处理以下注册表时,将有 2 个 RibbonMenuViewModel 实例:一个用于 Caliburn.Micro 的单例版本和一个关闭 MediatR INotificationHandler<> 泛型类型的临时版本。

结构图注册表

我想就使用 Singleton ViewModel 注册作为 MediatR 的 INotificationHandler 实例的最佳方法提出建议

这是 Caliburn.Micro 配置供参考:

Caliburn 引导程序配置

0 投票
1 回答
2117 浏览

c# - Autofac、MediatR 和多个 DLL 项目

我有几个(最终超过 100 个)小型 DLL 项目,它们都基于 MediatR。这意味着正在使用的接口只是 IMediatR 接口(IRequest<TResult>, IRequestHandler<IRequest<TResult>, TResult>)。由于其中很多没有 UI 并且通过从另一个 DLL 的编排调用,我想我可以创建一个 Autofac 容器项目 (DLL),注册所有微服务,然后在另一个应用程序中解决我在运行时需要的内容消耗我的容器。到目前为止,一切都很好。

我遇到问题的地方是每个 CQRS 处理程序的注册。现在,虽然所有内容的范围都很小,但它们的内联定义如下:

所以,我的问题是:我如何正确地进行此注册?现在,2 或 3 个“核心”(微服务),但下个月,20,明年,200,等等......

TIA

0 投票
0 回答
850 浏览

.net - Structuremap MediatR:由同一处理程序处理的多个通知

我有多个通知,对于所有 IBusEvent 类型的通知,我只需要 1 个处理程序实例。

这是我目前的情况

通知

处理程序

对于这两个通知,我只有一个处理程序。

国际奥委会

我需要的

通过这个 IOC 注册表,我为每个 IBusConfig 接收到 2 个 BusEventHandler 实例。

对于每个 IBusConfig,我只需要 1 个 BusEventHandler 实例。

我可以实现良好行为的唯一方法是更改​​ MediatorRegistry

在不更改 MediatorRegistry 的情况下有没有更好的方法来实现这一点?

0 投票
1 回答
4474 浏览

c# - MVC 中 Fluent Validation 的 ValidationException

我们正在使用 CQRS 模式,并且在流式验证的错误处理方面存在问题。(CQRS 模式 @ https://lostechies.com/jimmybogard/2015/05/05/cqrs-with-mediatr-and-automapper/

现在我们注入我们的验证处理程序,以便我们可以根据来自http://lostechies.com/jimmybogard/2014/09/09/tackling-cross-cutting-concerns-with-a-mediator-pipeline/的信息运行多个抽象验证器。这可行,但因为我可以看到在 foreach 循环中运行的规则

问题是未处理流畅的验证异常( ValidationException )。规则错误冒泡为

说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:FluentValidation.ValidationException:验证失败:

我期望的是流利的验证来处理错误并将其作为验证错误传递回 json 中的 ajax 请求

0 投票
2 回答
523 浏览

c# - 使用ninject的通用装饰器模式

我正在尝试用装饰器包装我的通用接口,但它根本不起作用,在我看来,从其他问题来看,唯一的方法是为每个装饰器明确地这样做,我的问题是它是否可能用ninject中的特定装饰器包装实现某个接口的所有类型。

代码:

0 投票
2 回答
2327 浏览

c# - MediatR 无需输入即可发送对象

如果我发送 HTTP Get 请求:

我有一个OwinMiddleware我正在使用的地方context来确定path一个IAsyncRequest<T>.

要知道要使用哪个异步请求,我有一个路径映射TypeIAsyncRequest<T>

我使用JObject创建一个实例GetCompanyRequest

我使用的原因JObject是对于 PUT 和 POST 请求,我将 JSON 正文直接反序列化为请求。

现在拼图的最后一块是object instantiatedRequest通过中介管道发送它。显然Task<T> SendAsync<T>(IAsyncRequest<T> request)行不通。

有趣的是,我不需要知道T,因为我将始终将其序列化为 astring以发回给用户。

那么签名Task<object> SendAsync(object request)可以在当前的调解器框架中使用以适应这一点吗?(不要求它完成,这可能吗?)

看源代码

我在mediator.cs

第二个GetHandler有我需要的参数,第一个是 by 调用的参数SendAsync,我认为插入一些东西没有问题。

这样做有什么顾虑吗?

0 投票
1 回答
1464 浏览

asp.net-core - FluentValidation 装饰器不适用于 autofac 和 mediator

我正在尝试使用 CQRS 模式设置 ASP.NET Core 应用程序。为了帮助实现这一点,我正在使用这些库:

我做了所有必需的设置,Mediatr 工作,依赖注入工作,但是,我的代码在进入处理程序之前没有通过验证。我想我在注册验证装饰器时遇到了问题。由于我使用的大多数库最近都进行了更新和更改,以支持 ASP.NET Core。我在配置中缺少什么?应该如何?

我的配置

MediatorPipeline(不确定我是否真的需要它。)

验证器处理程序

GetUserByEmailQuery.cs

在这个类中,我的代码直接进入 public UserDomain Handle(GetUserByEmailQuery message)而不进行验证。

0 投票
1 回答
3357 浏览

c# - 如何使用 MediatR 进行测试

我刚刚开始测试MediatR以清理我们繁重的网络控制器。实现它自己的功能一点也不难,但我在测试方面有点挣扎。

我从一个取消订单的控制器方法开始。

当订单被取消时,我们在哪里

  • 在数据库中的数据上设置“已取消”标志
  • 在审核日志中记录谁取消了会议
  • 通过电子邮件向某个主管发送通知。

所有这些都是在控制器方法内部触发的,使得控制器依赖于几个不同的服务。测试时,我们必须模拟每个部分以隔离我们想要测试的行为。

我实现这个的方法MediatR是从控制器方法发出一个CancelOrder-query。然后,我制作了一个CancelOrderHandler负责存储“已取消”标志的文件。

使用自定义- 实现,如果不引发任何异常MediatorPipeline,我会发出- 通知。OrderCancelledCancelOrderHandler

我有两个处理此通知的处理程序:OrderCancelledAuditLogHandlerOrderCancelledNotificationHandler. 第一个将负责审核日志,而第二个将发送通知。

每个处理程序都易于测试。但是我怎样才能测试所有东西都“合身”呢?我想确保当订单被取消时,审核日志和通知实际上得到了处理。在我的测试执行期间,所有处理程序都会做我真正不想要的事情(数据库写入和电子邮件发送),而且我不热衷于全面的端到端集成测试。

有任何想法吗?