簡體   English   中英

SignalR客戶端服務依賴項注入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM