我正在开发 .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中)?
答案 0 :(得分:4)
您必须将集线器类移动到单独的项目,否则您将具有循环依赖项(Web项目取决于Service,而Service取决于Web)。 移动后,Web项目将引用Hub项目和Service项目,Service将引用Hub项目,因此应解决该问题。