gpt4 book ai didi

asp.net-core - 有没有办法在 SignalR Core Hub 中实现事件?

转载 作者:行者123 更新时间:2023-12-04 17:39:22 25 4
gpt4 key购买 nike

在我的 Asp.Net Core 应用程序中,我通过 SignalR Core 从 .Net 客户端接收更新。通过这些更新,我尝试了解在 .Net 客户端上运行的后台服务的状态。
一些例子:

  • “定时器已成功启动。”
  • “定时器已成功暂停。”
  • “定时器已成功恢复。”
  • “定时器无法启动。”

  • 我想在我的 Asp.Net Core 应用程序中使用这些消息,并通过从集线器(数据访问层)发送事件将它们传输到我的项目的上层(逻辑层)。
    我似乎无法弄清楚如何做到这一点,我也没有找到关于这个问题的任何文档。
    public class TimerHub : Hub
    {
    public event EventHandler TimerCouldNotBeStarted;

    // Method called by .Net Client
    Task TimerStatusUpdate(string message)
    {
    switch (message)
    {
    case "Timer could not be started.":
    OnTimerCouldNotBeStarted(EventArgs.Empty); // Raise event
    break;
    }

    return Clients.All.SendAsync("EditionStatusUpdate", message);
    }

    protected virtual void OnTimerCouldNotBeStarted(EventArgs e)
    {
    TimerCouldNotBeStarted?.Invoke(this, e);
    }
    }

    public class EditionEngine
    {
    private readonly IHubContext<TimerHub> _timerHubContext;

    public EditionEngine(IHubContext<TimerHub> hubContext)
    {
    _timerHubContext = hubContext;

    _timerHubContext.TimerCouldNotBeStarted += TimerNotStarted; // Event is not found in the TimerHub
    }

    private static void TimerNotStarted(object sender, EventArgs e)
    {
    Console.WriteLine("Event was raised by Hub");
    }
    }

    在上面的代码示例中,您可以看到我要完成的任务。我遇到的问题是无法在集线器外部的类中访问该事件,因此我无法使用它。

    最佳答案

    更改您的 TimerCouldNotBeStarted事件成为您放入 DI 的服务。然后在您的 Hubs 构造函数中解析服务并在您的方法中使用它。

    public class TimerHub : Hub
    {
    private readonly TimeService _timer;

    public TimerHub(TimerService timer)
    {
    _timer = timer;
    }

    Task TimerStatusUpdate(string message)
    {
    switch (message)
    {
    case "Timer could not be started.":
    _timer.OnTimerCouldNotBeStarted(EventArgs.Empty); // Raise event
    break;
    }

    return Clients.All.SendAsync("EditionStatusUpdate", message);
    }
    }

    关于asp.net-core - 有没有办法在 SignalR Core Hub 中实现事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55221548/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com