我有class
我希望获得Cloudscribe SiteId
,但我不确定如何访问它。
如果我使用的是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);
}
}
}
答案 0 :(得分:1)
SignalR Core支持注入集线器,因此您应该只能将SiteContext
注入Messaging
。
Here是一个相关问题,展示了如何做到这一点。
答案 1 :(得分:0)
虽然@Pawel的回答对我有所帮助,但我的最终解决方案却有所不同。我尝试在我的SiteContext
中注册Startup.cs
并将SiteContext
注入我的Hub的构造函数中,但它在每次页面加载时都会返回不同的SiteID(或者如果我使用Singleton它给了我相同的跨多个CloudScribe站点的SiteId。)
最后,我的解决方案是将Hub构造函数更改为以下代码
public Messaging(SiteUserManager<SiteUser> userManager)
{
//Code here to get SiteID
_siteId = userManager.Site.Id.ToString();
}
这为我的申请中的每个租户网站提供了一致的SiteId。