SignalR:另一个项目的Access Hub类

时间:2018-09-17 07:49:36

标签: c# asp.net visual-studio asp.net-core

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

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

如果我尝试从Service项目中引用NotificationHub类,它将始终突出显示NotificationHub类,Visual Studio提供了以下建议:Suggestions

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;
}

如何从Service项目(在项目2中)访问NotificationHub类(在项目1中)?

1 个答案:

答案 0 :(得分:4)

您必须将集线器类移动到单独的项目,否则您将具有循环依赖项(Web项目取决于Service,而Service取决于Web)。 移动后,Web项目将引用Hub项目和Service项目,Service将引用Hub项目,因此应解决该问题。