Asp.net core mvc 访问控制器或视图外部的Cloudscribe站点ID
我有一个类,我想获得Cloudscribe站点ID,但我不确定如何访问它 如果我使用的是一个控制器,那么我将能够依赖SiteContext将其导入构造函数,但这在本例中不起作用 有人能告诉我如何在下面的代码中访问SiteId属性吗Asp.net core mvc 访问控制器或视图外部的Cloudscribe站点ID,asp.net-core-mvc,asp.net-core-signalr,cloudscribe,Asp.net Core Mvc,Asp.net Core Signalr,Cloudscribe,我有一个类,我想获得Cloudscribe站点ID,但我不确定如何访问它 如果我使用的是一个控制器,那么我将能够依赖SiteContext将其导入构造函数,但这在本例中不起作用 有人能告诉我如何在下面的代码中访问SiteId属性吗 using Microsoft.AspNetCore.SignalR; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks;
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);
}
}
}
SignalR Core支持注入到集线器中,因此您应该能够将SiteContext注入到消息传递中。
这是一个相关的问题,说明了如何做到这一点 尽管@Pawel的回答对我有所帮助,但我的最终解决方案却不同。我尝试在Startup.cs中注册SiteContext,并将SiteContext注入到集线器的构造函数中,但每次加载页面时它都会返回不同的SiteID,或者如果我使用Singleton,它会在多个CloudScribe站点中为我提供相同的SiteID 最后,我的解决方案是将Hub构造函数更改为以下代码
public Messaging(SiteUserManager<SiteUser> userManager)
{
//Code here to get SiteID
_siteId = userManager.Site.Id.ToString();
}
这为我的应用程序中的每个租户站点提供了一个一致的SiteId。谢谢@Pawel,我错误地认为,因为SiteContext已经可以注入到站点上的控制器中,它也可以用于我的集线器,但看起来我需要在startup.cs中显式引用它