【问题标题】:Use MediatR and CQRS in a Windows Service application在 Windows 服务应用程序中使用 MediatR 和 CQRS
【发布时间】:2018-06-05 11:46:55
【问题描述】:

我已经看到 MediatR 和 CQRS 的组合主要用于 Web 项目(尤其是在 MVC 项目中)。我们可以在控制器操作中调用 MediatRSend 方法而不会出现问题。

var result = await _mediator.Send(command);

是否适合在 Windows 服务应用程序中使用这种组合?我找不到任何在 Windows 服务应用程序中使用 MediatR 和 CQRS 的文章。

【问题讨论】:

  • We can call the Send method of MediatR inside a controller action without an issue - 在 Windows 服务中调用它有什么问题?
  • @Alex 我认为 Send 方法是为了在控制器操作中使用。
  • 没有什么能阻止您在 Windows 服务中使用它。它不以任何方式与 web 或 asp.net 绑定

标签: .net windows-services cqrs mediatr


【解决方案1】:

MediatR 只是内部消息传递。您可以在您喜欢的任何类型的应用中使用它。

【讨论】:

  • @Alex 我遇到了架构问题。在 Windows 服务应用程序中,我应该从哪里(哪个层和类)调用“_mediator.Send(command)”方法?
  • 我不确定我是否关注你。消息传递模式的部分优点在于,任何级别的组件都可以将消息发送到其他级别,而不会打破障碍。 MediatR 将在系统启动时设置并通过依赖注入注入到较低级别的类中,然后任何层都可以向任何其他层发送或接收消息。这能回答你的问题吗?
【解决方案2】:

我想我明白 OP 的来源。

在网络应用程序中使用 MediatR 时,很容易看到组成应用程序的各个部分。每个控制器操作将有一个请求/处理程序/可选,每个操作都彼此干净地分开。

在 Windows 服务中,没有单独操作的概念。只有一个入口点,因此知道在哪里使用 MediatR 可能会令人困惑。

我相信一个好方法是使用与单个入口点相对应的单个请求/处理程序/响应。这意味着将所有 Windows 服务逻辑都放在处理程序中。

如果这导致处理程序很长,那么随着新的抽象和消除代码重复的机会的发现不断重构。这与您在基于 MediatR 的 Web 应用程序中使用的方法完全相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多