c# - 是否可以抽象 SignalR 和 SignalR Core 以在一个客户端上使用?
问题描述
我的情况是,我有一个连接到 WebApi 的 WinForms 客户端,而这个 WebApi 有 SignalR。现在,正在开发 WebApi 的 ASP.Net Core 版本,它使用 SignalR Core。在这个开发阶段,客户端不能直接使用 SignalR Core,因此需要同时支持这两个版本。
在整个过程中使用的唯一几个集线器代理方法是On<T>
和Invoke
。
所以想法是创建一个抽象层,所以我创建了这样一个类:
public class ClassicService : IHubService
{
private HubConnection hubConnection;
private Dictionary<HubType, IHubProxy> hubs;
public IHubService Build(string token)
{
hubConnection = new HubConnection("serverurl");
hubs = new Dictionary<HubType, IHubProxy>() {
{ HubType.Notification, hubConnection.CreateHubProxy("NotificationHub")
};
return this;
}
public IHubService Start()
{
hubConnection.Start().Wait();
return this;
}
public IHub GetHub(HubType hubType)
{
return hubs[hubType];
}
}
IHub
界面如下所示:
public interface IHub
{
Task Invoke(string method, params object[] args);
IDisposable On(string eventName, Action onData);
IDisposable On<T>(string eventName, Action<T> onData);
}
但是,问题是在尝试通过调用该GetHub
方法获取集线器时,因为 IHubProxy 无法强制转换为IHub
.
有没有办法构建这个抽象层并让它工作?
解决方案
您在“.NET Core”客户端中使用“SignalR Core”,在“.NET Framework”客户端中使用普通的“SignalR”......所以你根本不会在一个客户端中同时使用它们,它只是没有意义,因为它取决于您客户的框架。
因此,带有“.NET Framework”的“WinForms”项目将始终使用“SignalR”。
推荐阅读
- python-3.x - 输出保持垂直打印
- ios - 如何连接到不在 iOS 应用程序中广告服务 UUID 的 BLE 设备
- powerbi - 在 Power Pivot / DAX 中创建基于日期范围计算可用设备的度量
- javascript - 通过 react csv 传递 api 数据
- json - 如何在 Power BI 中扩展多维 JSON
- python - Python 3 位运算符问题
- linux - 在 linux 机器上执行许多命令
- cmake - CMake添加以“* .a”结尾的文件
- julia - 在 Julia 中保存到 pdf 文件的问题
- python - 试图列出带有特定反应表情符号的“投票最多”的消息