问题标签 [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# - 为所有传入请求提供一个 Request/RequestHandler
在我当前的项目中,我一直在使用MediatR并取得了很大的成功。使用中介管道来解决横切关注点的想法非常好。
我没有得到的一件事(也许原因是我缺乏对 c# covariance/contravariance的了解)是如何在单个处理程序中处理所有传入请求?无论请求的类型如何,我都想在执行请求之前执行一个操作:
或者
我得到了 Jimmy 关于 PreRequestHandler 的说法,但是我无法为所有请求实现一个单独的请求,因为它们总是被键入(我可以为我拥有的每个 IRequest 实现一个 IPreRequest,但这听起来不对)...... .
请问有什么想法吗?
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 引导程序配置
c# - Autofac、MediatR 和多个 DLL 项目
我有几个(最终超过 100 个)小型 DLL 项目,它们都基于 MediatR。这意味着正在使用的接口只是 IMediatR 接口(IRequest<TResult>, IRequestHandler<IRequest<TResult>, TResult>)。由于其中很多没有 UI 并且通过从另一个 DLL 的编排调用,我想我可以创建一个 Autofac 容器项目 (DLL),注册所有微服务,然后在另一个应用程序中解决我在运行时需要的内容消耗我的容器。到目前为止,一切都很好。
我遇到问题的地方是每个 CQRS 处理程序的注册。现在,虽然所有内容的范围都很小,但它们的内联定义如下:
所以,我的问题是:我如何正确地进行此注册?现在,2 或 3 个“核心”(微服务),但下个月,20,明年,200,等等......
TIA
.net - Structuremap MediatR:由同一处理程序处理的多个通知
我有多个通知,对于所有 IBusEvent 类型的通知,我只需要 1 个处理程序实例。
这是我目前的情况
通知
处理程序
对于这两个通知,我只有一个处理程序。
国际奥委会
我需要的
通过这个 IOC 注册表,我为每个 IBusConfig 接收到 2 个 BusEventHandler 实例。
对于每个 IBusConfig,我只需要 1 个 BusEventHandler 实例。
我可以实现良好行为的唯一方法是更改 MediatorRegistry
在不更改 MediatorRegistry 的情况下有没有更好的方法来实现这一点?
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 请求
c# - 使用ninject的通用装饰器模式
我正在尝试用装饰器包装我的通用接口,但它根本不起作用,在我看来,从其他问题来看,唯一的方法是为每个装饰器明确地这样做,我的问题是它是否可能用ninject中的特定装饰器包装实现某个接口的所有类型。
代码:
c# - MediatR 无需输入即可发送对象
如果我发送 HTTP Get 请求:
我有一个OwinMiddleware
我正在使用的地方context
来确定path
一个IAsyncRequest<T>
.
要知道要使用哪个异步请求,我有一个路径映射Type
到IAsyncRequest<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
,我认为插入一些东西没有问题。
这样做有什么顾虑吗?
asp.net-core - FluentValidation 装饰器不适用于 autofac 和 mediator
我正在尝试使用 CQRS 模式设置 ASP.NET Core 应用程序。为了帮助实现这一点,我正在使用这些库:
我做了所有必需的设置,Mediatr 工作,依赖注入工作,但是,我的代码在进入处理程序之前没有通过验证。我想我在注册验证装饰器时遇到了问题。由于我使用的大多数库最近都进行了更新和更改,以支持 ASP.NET Core。我在配置中缺少什么?应该如何?
我的配置
MediatorPipeline(不确定我是否真的需要它。)
验证器处理程序
GetUserByEmailQuery.cs
在这个类中,我的代码直接进入 public UserDomain Handle(GetUserByEmailQuery message)
而不进行验证。
c# - 如何使用 MediatR 进行测试
我刚刚开始测试MediatR
以清理我们繁重的网络控制器。实现它自己的功能一点也不难,但我在测试方面有点挣扎。
我从一个取消订单的控制器方法开始。
当订单被取消时,我们在哪里
- 在数据库中的数据上设置“已取消”标志
- 在审核日志中记录谁取消了会议
- 通过电子邮件向某个主管发送通知。
所有这些都是在控制器方法内部触发的,使得控制器依赖于几个不同的服务。测试时,我们必须模拟每个部分以隔离我们想要测试的行为。
我实现这个的方法MediatR
是从控制器方法发出一个CancelOrder
-query。然后,我制作了一个CancelOrderHandler
负责存储“已取消”标志的文件。
使用自定义- 实现,如果不引发任何异常MediatorPipeline
,我会发出- 通知。OrderCancelled
CancelOrderHandler
我有两个处理此通知的处理程序:OrderCancelledAuditLogHandler
和OrderCancelledNotificationHandler
. 第一个将负责审核日志,而第二个将发送通知。
每个处理程序都易于测试。但是我怎样才能测试所有东西都“合身”呢?我想确保当订单被取消时,审核日志和通知实际上得到了处理。在我的测试执行期间,所有处理程序都会做我真正不想要的事情(数据库写入和电子邮件发送),而且我不热衷于全面的端到端集成测试。
有任何想法吗?