Asp.net mvc 如何在MVC应用程序中使用Singleton Signal客户端
我需要使用.net客户端连接到启用信号器的应用程序 客户机类需要是一个单例,并加载以供全局使用 我想知道在MVC应用程序中全局使用单例的最佳技术是什么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
我一直在研究使用应用程序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(),最后把它取了出来,它成功了。