我需要使用 .net 客户端连接到启用 Signalr 的应用程序。
客户端类需要是单一实例并加载以供全局使用。
我想知道在 MVC 应用程序中全局使用单例的最佳技术是什么。
我一直在研究使用应用程序开始获取单例,我在哪里保存它对我来说是一个谜。
根据设计,HUB 不能是单一实例 SignalR 为每个传入请求创建一个实例。
在客户端上,我将使用 IoC 框架并将客户端注册为单例,这样尝试获取它的每个模块都将获得相同的实例。
我做了一个小库来为你处理这一切,安装服务器,比如
Install-Package SignalR.EventAggregatorProxy
阅读此处了解连接它的几个步骤,它需要一个背板服务总线或事件聚合器才能拾取您的事件
https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki
配置完成后,
使用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
}
}
在服务器上,您可以使用 GetClients()
方法从集线器外部向所有连接的客户端发送消息,如下所示:
public MyHub : Hub
{
// (Your hub methods)
public static IHubConnectionContext GetClients()
{
return GlobalHost.ConnectionManager.GetHubContext<MyHub>().Clients;
}
}
你可以像这样使用它:
MyHub.GetClients().All.SomeMethod();