我有一个想要获取Cloudscribe SiteId的class,但我不确定如何访问它。
如果我使用的是controller,那么我将能够依赖于SiteContext被DI到构造器中,但是在这个例子中不起作用。
有人能告诉我如何在下面的代码中访问SiteId属性吗?
using Microsoft.AspNetCore.SignalR;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace CoLabR
{
public class Messaging : Hub
{
private string _siteId;
public Messaging()
{
//Code here to get SiteID
_siteId = "<<Code for getting Site ID";
}
public Task Post(string message)
{
return Clients.Group(_siteId).InvokeAsync("Post", message);
}
public Task JoinRoom()
{
Groups.AddAsync(Context.ConnectionId, _siteId);
return Clients.Group(_siteId).InvokeAsync("Post", Context.User.Identity.Name + " joined. " + _siteId);
}
}
}发布于 2017-10-19 12:40:40
SignalR核心支持注入集线器,因此您应该能够将SiteContext注入到Messaging中。Here是一个相关的问题,它展示了如何做到这一点。
发布于 2017-10-20 04:54:12
虽然@Pawel的答案对我很有帮助,但我最终的解决方案却不同。我尝试在我的Startup.cs中注册SiteContext,并将SiteContext注入到Hub的构造函数中,但每次加载页面时它都会返回一个不同的SiteID (或者如果我使用单例,它会在多个CloudScribe站点上返回相同的SiteId )。
最后,我的解决方案是将Hub构造函数更改为以下代码
public Messaging(SiteUserManager<SiteUser> userManager)
{
//Code here to get SiteID
_siteId = userManager.Site.Id.ToString();
}这为我的应用程序中的每个租户站点提供了一致的SiteId。
https://stackoverflow.com/questions/46820706
复制相似问题