首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从应用程序的其他部分访问signalr集线器

从应用程序的其他部分访问signalr集线器
EN

Stack Overflow用户
提问于 2021-07-30 19:30:11
回答 2查看 232关注 0票数 0

我正在编写一个blazor服务器web应用程序。

我写了一个非常基本的signalr中心:

代码语言:javascript
复制
using Microsoft.AspNetCore.SignalR;

public class MyHub: Hub
{
   public override Task OnConnectedAsync()
   {
      ...
      return base.OnConnectedAsync();
   }

   public Task my_function()
   {
      ...
   }
   ....
}

这一步效果很好。

现在,我想从blazor应用程序的另一部分访问这个中心:

代码语言:javascript
复制
public class AnotherClass
{
   private readonly IHubContext<MyHub> _hub;

   public AnotherClass(IHubContext<MyHub> hub)
   {
      _hub = hub;
   }

   ...
   
   public void another_function()
   {
      _hub.Clients.All.SendAsync(...); // <- This line works fine
      (_hub as MyHub).my_function();   // <- Does not work
   }
}

如您所见,我正在使用依赖项注入来访问我的集线器对象。我读过很多文档,包括微软的官方文档。每个人都说我们必须在这种依赖注入中使用IHubContext类型。

所以_hub对象不知道my_function方法.

我尝试过很多事情:

  • 将_hub转换为MyHub
  • 声明IMyHub接口并在依赖项注入中使用IMyHub
  • 等。

什么都不管用..。

我的问题是:如何从my_function对象调用AnotherClass?

非常感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-30 20:37:04

如何从my_function对象调用AnotherClass?

不能。集线器只在响应客户端调用时才被调用。无法手动调用集线器方法。

如果需要在集线器内部和集线器外部运行逻辑,则需要重构代码,以便集线器和AnotherClass可以访问某些共享类。

票数 -2
EN

Stack Overflow用户

发布于 2021-07-30 20:45:03

我就是这么做的。

为集线器创建一个接口:

代码语言:javascript
复制
public interface IMyHub
{
    Task MyFunction(int parameter);
}

然后您的集线器实现了如下接口:

代码语言:javascript
复制
public class MyHub : Hub<IMyHub>
{
    public async Task MyFunction(int parameter)
    {
        // do stuff
    }
}

然后将集线器注入其他类,如下所示:

代码语言:javascript
复制
private readonly IHubContext<MyHub, IMyHub> _myHub;

您可以通过以下方式调用您的函数:

代码语言:javascript
复制
_myhub.Clients.All.MyFunction(someInt);

这是基于强类型集线器从集线器外发送消息文档的。

添加到IMyHUb接口中的函数不必在MyHub类中有实现代码。例如,用

代码语言:javascript
复制
public interface IMyHub
{
    Task MyFunction(int parameter);
    Task MySecondFunction();
}

在您的另一个类中,可以调用

代码语言:javascript
复制
_myhub.Clients.All.MySecondFunction();

在MyHub类中没有任何新代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68596247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档