Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何在MVC应用程序中使用Singleton Signal客户端_Asp.net Mvc_Singleton_Signalr - Fatal编程技术网

Asp.net mvc 如何在MVC应用程序中使用Singleton Signal客户端

Asp.net mvc 如何在MVC应用程序中使用Singleton Signal客户端,asp.net-mvc,singleton,signalr,Asp.net Mvc,Singleton,Signalr,我需要使用.net客户端连接到启用信号器的应用程序 客户机类需要是一个单例,并加载以供全局使用 我想知道在MVC应用程序中全局使用单例的最佳技术是什么 我一直在研究使用应用程序start来获取singleton,我把它放在哪里对我来说是个谜。在服务器上,您可以使用GetClients()方法从集线器外部向所有连接的客户端发送消息,如下所示: public MyHub : Hub { // (Your hub methods) public static IHubConnect

我需要使用.net客户端连接到启用信号器的应用程序

客户机类需要是一个单例,并加载以供全局使用

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


我一直在研究使用应用程序start来获取singleton,我把它放在哪里对我来说是个谜。

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

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

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

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

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

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

集线器不能是单例的,因为设计信号器会为每个传入的请求创建一个实例

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

我已经为您制作了一个小lib来处理所有这些,安装服务器就像

Install-Package SignalR.EventAggregatorProxy
阅读这里的几个步骤来连接它,它需要一个背板服务总线或事件聚合器来收集您的事件

配置后,在客户端项目中使用安装.NET客户端

Install-Package SignalR.EventAggregatorProxy.Client.DotNet
看看这里如何设置它

一旦配置好,任何类都可以将自己注册为监听器,就像

public class MyViewModel : IHandle<MyEvent>
{
   public MyViewModel(IEventAggregator eventAggregator) 
   {
      eventAggregator.Subscribe(this);
   }
   public void Handle(MyEvent message)
   {
      //Act on MyEvent
   }
}
公共类MyViewModel:IHandle
{
公共MyViewModel(IEventAggregator事件聚合器)
{
eventAggregator.Subscribe(此);
}
公共无效句柄(MyEvent消息)
{
//对MyEvent采取行动
}
}

集线器不能是单例设计,Signal为每个传入请求创建一个实例

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

我已经为您制作了一个小lib来处理所有这些,安装服务器就像

Install-Package SignalR.EventAggregatorProxy
阅读这里的几个步骤来连接它,它需要一个背板服务总线或事件聚合器来收集您的事件

配置后,在客户端项目中使用安装.NET客户端

Install-Package SignalR.EventAggregatorProxy.Client.DotNet
看看这里如何设置它

一旦配置好,任何类都可以将自己注册为监听器,就像

public class MyViewModel : IHandle<MyEvent>
{
   public MyViewModel(IEventAggregator eventAggregator) 
   {
      eventAggregator.Subscribe(this);
   }
   public void Handle(MyEvent message)
   {
      //Act on MyEvent
   }
}
公共类MyViewModel:IHandle
{
公共MyViewModel(IEventAggregator事件聚合器)
{
eventAggregator.Subscribe(此);
}
公共无效句柄(MyEvent消息)
{
//对MyEvent采取行动
}
}

如果任何人有问题,请检查您与Signaler一起使用的依赖项解析程序。我使用的是新的DefaultDependencyResolver(),最后去掉了它,它就工作了。如果有人有问题,请检查您与Signaler一起使用的依赖项解析程序。我当时正在使用新的DefaultDependencyResolver(),最后把它取了出来,它成功了。