问题标签 [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.
asp.net - MediatR 处理程序中的 ASP.NET 基础结构
我更喜欢让我的处理程序不受难以测试的 ASP.NET 基础设施的影响(是的,即使在 ASP.NET Core 中也是如此)。但有时它会发生并且你有一个像 UserManager 的依赖项(我想知道有一天为什么它不是一个接口),HttpContext 等等,并且单元测试变成了一个模拟地狱。
我尝试使用集成测试来处理它,方法是创建一个 TestServer 并为每个 api 调用初始化所有 ASP.NET 基础结构。它工作得很好,但如果我想测试我的处理程序的简单逻辑,有时似乎有点矫枉过正。虽然它解决了模拟 ASP.NET 基础结构的技术问题,但它保留了将 ASP.NET 基础结构放入处理程序的架构问题(如果您这么认为的话)。
我想知道处理它的推荐方法是什么?
protobuf-net - 使用 protobuf-net 在序列化/反序列化期间丢失通用类型信息
我正在尝试集成 protobuf-net 和 mediatR。这个想法是有一个有效负载将到达的端点。然后我应该反序列化请求消息并将其交给 mediatR,然后它应该根据请求消息类型解析到适当的处理程序。
每个请求都继承自 IRequest。有一个结果基类和许多从它继承的具体类。喜欢:
问题是,当我用 protobuf 序列化对象时,通用信息会丢失。我正在一个地方进行反序列化(尝试使用反射等)。我无法反序列化为 IRequest 类型的对象。
有没有办法保留有关泛型参数的信息,以便我可以将我的对象反序列化为 IRequest 类型而不仅仅是 CreateUserRequest ?
当然,希望,我做错了什么?
c# - Autofac:将所有 MediatR 处理程序注册为泛型类型的内部类
语境
在尝试简化 MediatR 代码的同时,我们为 GetAll、GetSingle 等功能创建了通用的请求/响应/处理程序组合。您可以在下面找到 GetAll 实现
问题
我们似乎无法使用 Autofac 一次注册所有的 RequestHandler。
我们可以使用以下方法在 Autofac 模块中注册一种特定类型的处理程序:
但是我们希望对所有的实现都这样做IRequestHandler<,>
(而不仅仅是 GetAll )。我们已经使用AsClosedTypesOf
文档中建议的函数进行了尝试:
或者
但这会产生以下异常:
Autofac.Core.Registration.ComponentNotRegisteredException: '请求的服务
'MediatR.IRequestHandler<GetAll<T>.Request,GetAll<T>.Response>'
尚未注册。为避免此异常,请注册组件以提供服务,使用 IsRegistered() 检查服务注册,或使用 ResolveOptional() 方法解决可选依赖项。
我们在这里做错了什么(或忘记了)?
.net - 为什么 CQRS 命令处理程序不包括保存 UnitOfWork?
我一直在寻找不同的方法CQRS samples
,其中大多数使用不保存的命令处理程序UnitOfWork
(即DataContext
在 的情况下Entity Framework
)。像这样的东西:
处理请求时,保存(和事务提交)通常在后台发生。
我从许多领先的 CQRS 专家那里看到了这种方法,但我从未听说过它的推理。
这种方法的最大问题是当您需要在处理程序调用返回后立即获取实体 ID(这种情况经常发生)。显然有一些方法可以解决它(即使用 Guid,从您的数据库中预先请求唯一的 Id 等),但看起来很笨拙。
但是这种方法的优点是什么?从理论上讲,如果我们每个请求有多个处理程序,则不进行多次数据库往返可能会有所帮助。但它不会发生很多。我想到的另一个优点是我们不必键入例行的 Save 调用并让它自动发生。这有点好,但它是否加重了 ID 生成问题?
dryioc - MediatR 在预期单个时获取多个处理程序实例
我正在使用通用类型请求和处理程序。
如果我有多个 IAsyncRequestHandler DryIoc 正在解析多个实例,而不是单个实例,则会导致 MediatR 引发异常。
我怎么解决这个问题?请在此处
的 Net Fiddle 检查此行为。(注意,在这个例子中Generic Type只是用来证明这一点——MediatR抛出异常——在我的生产代码中,Generic Types实际上是需要的)
asp.net-core - 如何为 ASP.NET Core 注册和使用 MediatR 管道处理程序?
我正在为 Core 的 DI 使用 ASP.NET Core、最新的 MediatR 和 MediatR 扩展。
我正在尝试使用官方博客文章建立一个带有验证的管道。例子在这里。
我不明白如何注册/使用该管道类。另一篇博客文章展示了如何做到这一点,但我认为它适用于 AutoFac。
如何为内置容器执行此操作?
c# - 如何在 ASP.NET Core 中手动注册 Mediatr 处理程序?
我正在使用带有内置容器的 ASP.NET Core。
自动注册应该是这样完成的:
这会自动 1) 配置 MediatR,以及 2) 注册在程序集中找到的所有处理程序。
但我想手动注册我的处理程序。我怎么做?
c# - Double validation in MediatR pipeline
I'm on ASP.NET Core and the new MediatR which supports pipelines. My pipeline includes validation.
Consider this action:
- The command is validated (I'm using FluentValidation)
HandleInvalidCommand
checksModelState.IsValid
, and if invalid then redirects to the view for the user to correct the data- Else the action runs
- The command is sent into the pipeline
- The pipeline validates the command, AGAIN
So if the command is valid, then validation occurs twice (and validators are expensive to run).
How best can I deal with this?
EDIT: The obvious way is to remove validation from the pipeline, but that is no good because the command may come from the UI, but also from the app itself. And you want validation in both cases.