我需要使用.net客户端连接到启用Signalr的应用程序。
客户端类需要是单例并加载以供全局使用。
我想知道在MVC应用程序中全局使用单例的最佳技术是什么。
我一直在研究使用应用程序开始获取单例,我保留它对我来说是一个谜。
答案 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();