Passing strongly typed Hubs in SignalR Passing strongly typed Hubs in SignalR asp.net asp.net

Passing strongly typed Hubs in SignalR


There is now a new overload of GetHubContext that takes two generic parameters. The first is the Hub type like before, but the second generic parameter is TClient (which is the T in Hub<T>).

Assuming that StockTickerHub is defined as follows:

public class TypedDemoHub : Hub<IClient>

Then

GlobalHost.ConnectionManager.GetHubContext<StockTickerHub>().Clients

becomes

GlobalHost.ConnectionManager.GetHubContext<StockTickerHub, IClient>().Clients

The type returned by the new overload to GetHubContext would be IHubContext<IClient> and the Clients property would be IHubConnectionContext<IClient> instead of IHubConnectionContext<dynamic> or IHubConnectionContext<StockTickerHub>.


In .NET Core Web App you can inject strongly typed signalR hub context like this

public interface IClient{    Task ReceiveMessage(string message);}public class DevicesHub : Hub<IClient>{}public class HomeController : ControllerBase{    private readonly IHubContext<DevicesHub, IClient> _devicesHub;    public HomeController(IHubContext<DevicesHub, IClient> devicesHub)    {        _devicesHub = devicesHub;    }           [HttpGet]    public IEnumerable<string> Get()    {       _devicesHub.Clients          .All          .ReceiveMessage("Message from devices.");       return new string[] { "value1", "value2" };    }}


Or take look at:

https://github.com/Gandalis/SignalR.Client.TypedHubProxy

It comes with more features than the TypeSafeClient mentioned above.