【问题标题】:Have a single Request/RequestHandler for all incoming requests为所有传入请求提供一个 Request/RequestHandler
【发布时间】:2015-10-20 17:47:07
【问题描述】:

我一直在使用MediatR,在我当前的项目中取得了很大的成功。使用mediator pipeline 解决跨领域问题的想法非常好。

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

IRequest

IRequest<Foo>

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

有什么想法吗?

【问题讨论】:

  • 不知道 MediatR 是什么,但 IRequest&lt;T&gt; 不是继承自 IRequest 吗?如果没有,那就太傻了。编辑:根据来源IRequest : IRequest&lt;Unit&gt;,其中Unit 是一个通用的out 参数。当然你可以用它做点什么,例如让你的Foo继承自Unit
  • 然后我会让我的所有输出参数都从 Unit 继承,这似乎不可行?

标签: c# asp.net-mvc decorator mediator mediatr


【解决方案1】:

这是我使用 Castle Windsor 和 Mediatr 的方法(假设我们要记录并授权对每个处理程序的调用)。请参阅我提出的要点:Decorator unit test

请注意,在向容器(在我的情况下为温莎城堡)注册处理程序时,您需要以正确的顺序注册它们(至少在温莎,YMMV)。

另外,请注意我在注册组件时进行了排除(对于装饰器,注册所有具体类型,不包括其他装饰器处理程序。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 2022-10-05
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    相关资源
    最近更新 更多