在SignalR 2,你可以做這樣的事情(從我的博客取):如何在SignalR 3中獲得HubContext?
var stockTickerHub = GlobalHost.ConnectionManager.GetHubContext<StockTickerHub>();
這讓你從輪轂外部(例如從股票行情線程)獲取到SignalR樞紐的參考。
這在SignalR 3中看起來似乎不可用。您如何在新的和即將推出的SignalR中實現同等功能?
在SignalR 2,你可以做這樣的事情(從我的博客取):如何在SignalR 3中獲得HubContext?
var stockTickerHub = GlobalHost.ConnectionManager.GetHubContext<StockTickerHub>();
這讓你從輪轂外部(例如從股票行情線程)獲取到SignalR樞紐的參考。
這在SignalR 3中看起來似乎不可用。您如何在新的和即將推出的SignalR中實現同等功能?
從我見過的每個示例以及我已經實現的少數SignalR 3應用程序中,您不再有對集線器的強類型引用。當前的方法通過集線器的名稱和URL連接到集線器。 On泛型方法將創建一個訂閱,以便從該集線器和您提供的方法名稱進行廣播。
HubConnection connection = new HubConnection(ServerURL);
IHubProxy hubProxy = connection.CreateHubProxy("StockTickerHub");
hubProxy.On<StockTickerMessage>("[Your method name here]", msg => {
//your UI update logic here
});
我問同樣的事情到SignalR
,大衛·福勒的創造者上Jabbr,一個論壇,SignalR的創造者和ASP.NET 5
建築師不時掛在的時候,他的回答這個問題是使用dependency injection
。
雖然我還沒有與SignalR 3
嘗試過,我敢肯定你可以注入,在你的類實現IConnectionManager
的ConnectionManager
一個實例,並使用它,就像你會使用GlobalHost
解決您的樞紐環境。
再次,我沒有這樣做SignalR3
,但我希望這會讓你更接近尋找解決方案。我使用Autofac
在我的集線器中注入依賴關係,但也在其他類中注入ConnectionManager
的實例以獲取集線器上下文)。
希望這會有所幫助。祝你好運!
依賴注入確實是這種方式和工作。
實施例:
public class ChatController : Controller
{
readonly IConnectionManager _connectionManager;
public ChatController(IConnectionManager connectionManager)
{
_connectionManager = connectionManager;
}
public IActionResult Chat(string message)
{
IHubContext context = _connectionManager.GetHubContext<ChatHub>();
IConnection connection = _connectionManager.GetConnectionContext<PersistentConnection>().Connection;
context.Clients.All.NewMessage(message);
return new EmptyResult();
}
}