[英]SignalR client service dependency injection
我已經實現了Microsoft.AspNetCore.SignalR.Client作為服務。 我可以成功注入它並將消息發送到中心。 但是我無法弄清楚如何從該特定類監聽集線器(接收消息)。
我可以通過OnBroadcast
操作在HubClient
接收消息。
public class HubClient : IHub
{
private HubConnection hubConnection;
private async Task ConnectAsync()
{
// Connect
hubConnection.On<string>("Broadcast", OnBroadcast);
}
public async Task Send(string message)
{
await hubConnection.SendAsync("method", message);
}
private void OnBroadcast(string message)
{
// Received message
}
}
如何接收和處理MyClass
消息? 如何使OnBroadcast(string message)
在MyClass
工作,以便可以對消息執行某些操作? 我有多個類,每個類都必須處理來自中心的消息。
public class MyClass
{
private readonly IHub hub;
public MyClass(IHub hub)
{
this.hub = hub;
}
public Task Send(string message)
{
// Sending message to the hub works
await hub.Send(message);
}
// How can I process received messages here?
}
public interface IHub
{
Task Send(string data);
event Action<string> OnBroadcastAction;
}
public class HubClient : IHub
{
private HubConnection hubConnection;
public event Action<string> OnBroadcastAction;
private async Task ConnectAsync()
{
// Connect
hubConnection.On<string>("Broadcast", OnBroadcast);
}
public async Task Send(string message)
{
await hubConnection.SendAsync("method", message);
}
private void OnBroadcast(string message)
{
OnBroadcastAction?.Invoke(message);
}
}
public class MyClass
{
private readonly IHub hub;
public MyClass(IHub hub)
{
this.hub = hub;
hub.OnBroadcastAction += OnBroadcast;
}
public Task Send(string message)
{
await hub.Send(message);
}
private void OnBroadcast(string message)
{
Console.WriteLine(message);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.