如何在MVC应用程序中使用Singleton Signalr客户端

时间:2014-01-17 22:37:39

标签: asp.net-mvc singleton signalr

我需要使用.net客户端连接到启用Signalr的应用程序。

客户端类需要是单例并加载以供全局使用。

我想知道在MVC应用程序中全局使用单例的最佳技术是什么。

我一直在研究使用应用程序开始获取单例,我保留它对我来说是一个谜。

2 个答案:

答案 0 :(得分:3)

HUB无法通过设计成为单身人士SignalR为每个传入请求创建一个实例。

在客户端上,我将使用IoC框架并将客户端注册为Singleton,这样尝试获取它的eachb模块将获得相同的实例。

我已经制作了一个小小的lib来处理所有这些,安装像

这样的服务器
Install-Package SignalR.EventAggregatorProxy

请阅读此处了解连接它的几个步骤,它需要一个背板服务总线或事件聚合器才能获取您的活动

https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki

配置完成后,使用

在客户端项目中安装.NET客户端
Install-Package SignalR.EventAggregatorProxy.Client.DotNet

请参阅此处如何设置

https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki/.NET-Client

配置完成后,任何类都可以将自己注册为像

这样的监听器
public class MyViewModel : IHandle<MyEvent>
{
   public MyViewModel(IEventAggregator eventAggregator) 
   {
      eventAggregator.Subscribe(this);
   }
   public void Handle(MyEvent message)
   {
      //Act on MyEvent
   }
}

答案 1 :(得分:2)

在服务器上,您可以使用GetClients()方法从集线器外部向所有连接的客户端发送消息,如下所示:

public MyHub : Hub 
{
    // (Your hub methods)

    public static IHubConnectionContext GetClients()
    {
        return GlobalHost.ConnectionManager.GetHubContext<MyHub>().Clients;
    }
} 

你可以像这样使用它:

MyHub.GetClients().All.SomeMethod();