首页 > 解决方案 > SignalR:从另一个项目访问 Hub 类

问题描述

我正在开发.Net Core Web 应用程序并希望在控制器类之外访问 IHubContext 但我无法引用 NotificationHub 类。

这是我的解决方案结构,带有一些标记(红色数字):解决方案结构

如果我尝试从 Service 项目引用 NotificationHub 类,它总是强调 NotificationHub 类,Visual Studio 提供以下建议

NotificationHub.cs(在项目 1 中)

public class NotificationHub : Hub
{
    public string GetConnectionId()
    {
        return Context.ConnectionId;
    }

    public async Task SendMessage(string user, string message)
    {
        await Clients.All.SendAsync("ReceiveNotification", user, message);
    }

    public Task SendPrivateMessage(string user, string message)
    {
        return Clients.User(user).SendAsync("ReceiveNotification", message);
    }
}

...Service.cs(在项目 2 中)

private readonly IHubContext<NotificationHub> _hubContext; // it uderlines "NotificationHub"

public PDUSwitchService(ILogger<PDUSwitchService> logger, IHubContext<NotificationHub> hubContext)
{
    _logger = logger;
    _hubContext = hubContext;
}

我如何能够从服务项目(在项目 2 中)访问 NotificationHub 类(在项目 1 中)?

标签: c#asp.netvisual-studioasp.net-core

解决方案


您必须将您的集线器类移动到一个单独的项目,否则您有一个循环依赖(Web 项目依赖于服务和服务依赖于 Web)。移动后,Web项目会引用Hub和Service项目,Service会引用Hub项目,问题应该解决了。


推荐阅读