【问题标题】:SignalR client service dependency injectionSignalR 客户端服务依赖注入
【发布时间】:2018-03-21 01:00:01
【问题描述】:

我已将 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?
}

【问题讨论】:

    标签: c# dependency-injection .net-core signalr


    【解决方案1】:
    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);
        }
    }
    

    【讨论】:

    • HubClient的连接在哪里?以及如何在 .net 核心中将 HubClient 用作单例?
    猜你喜欢
    • 2023-03-19
    • 2015-10-10
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多