是否可以抽象化SignalR和SignalR Core以便在一个客户端上使用?

问题描述 投票:0回答:1

我处于一个WinForms客户端连接到WebApi的情况,而该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);
}

但是,问题是由于无法将IHubProxy强制转换为GetHub,因此尝试通过调用IHub方法来获取集线器。

有没有一种方法可以构建此抽象层并使它正常工作?

c# asp.net-core signalr asp.net-core-signalr
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.