C# Access SignalR Hub上下文。ASP.NET Core中单例服务中的项

C# Access SignalR Hub上下文。ASP.NET Core中单例服务中的项,c#,asp.net-core,.net-core,signalr,C#,Asp.net Core,.net Core,Signalr,我试图对一个大表的信号器广播进行分页,以便每个订阅的组都有一个用户看到的“当前页面”。我希望页码的状态位于中心的Context.Items字典中 在我的集线器中,我设置了如下页码: public class OnlineBotsHub : Hub { public async Task JoinGroup(string num) { await Groups.AddToGroupAsync(Context.ConnectionId, num); a

我试图对一个大表的信号器广播进行分页,以便每个订阅的组都有一个用户看到的“当前页面”。我希望页码的状态位于中心的Context.Items字典中

在我的集线器中,我设置了如下页码:

public class OnlineBotsHub : Hub
{
    public async Task JoinGroup(string num)
    {
        await Groups.AddToGroupAsync(Context.ConnectionId, num);
        await Clients.Group(num).SendAsync("AddedToGroup", "added to group number: " + num);
    }

    public void Pagination(string pageNum)
    {
        Context.Items.Add("page", pageNum);
    }
}
private readonly IHubContext<OnlineBotsHub> _hub;
public OnlineBotService(IHubContext<OnlineBotsHub> hub)
{
    _hub = hub;
}
Context.Items.TryGetValue("page", out object currentPage);
var returnList = PagedList<T>.ToPagedList(addBots.OrderBy(x => x.RowId), currentPage, 100);
目前,我将我的集线器注入singleton服务,如下所示:

public class OnlineBotsHub : Hub
{
    public async Task JoinGroup(string num)
    {
        await Groups.AddToGroupAsync(Context.ConnectionId, num);
        await Clients.Group(num).SendAsync("AddedToGroup", "added to group number: " + num);
    }

    public void Pagination(string pageNum)
    {
        Context.Items.Add("page", pageNum);
    }
}
private readonly IHubContext<OnlineBotsHub> _hub;
public OnlineBotService(IHubContext<OnlineBotsHub> hub)
{
    _hub = hub;
}
Context.Items.TryGetValue("page", out object currentPage);
var returnList = PagedList<T>.ToPagedList(addBots.OrderBy(x => x.RowId), currentPage, 100);
专用只读IHubContext\u hub;
公共OnlineBotService(IHubContext中心)
{
_轮毂=轮毂;
}
但我似乎无法使用此引用访问中心的Context.Items属性。 我希望在这样的单例服务中使用此值:

public class OnlineBotsHub : Hub
{
    public async Task JoinGroup(string num)
    {
        await Groups.AddToGroupAsync(Context.ConnectionId, num);
        await Clients.Group(num).SendAsync("AddedToGroup", "added to group number: " + num);
    }

    public void Pagination(string pageNum)
    {
        Context.Items.Add("page", pageNum);
    }
}
private readonly IHubContext<OnlineBotsHub> _hub;
public OnlineBotService(IHubContext<OnlineBotsHub> hub)
{
    _hub = hub;
}
Context.Items.TryGetValue("page", out object currentPage);
var returnList = PagedList<T>.ToPagedList(addBots.OrderBy(x => x.RowId), currentPage, 100);
Context.Items.TryGetValue(“页面”,out对象当前页面);
var returnList=PagedList.ToPagedList(addBots.OrderBy(x=>x.RowId),currentPage,100);
我是否能够以某种方式从另一个类访问中心的Context.Items字典

我是否能够以某种方式从另一个类访问中心的Context.Items字典

没有

相反,您应该拥有一个包含组信息的服务,您的中心和OnlineBotService都可以访问和使用该组信息

我似乎无法使用此引用访问中心的Context.Items属性

Context.Items.TryGetValue(“页面”,out对象当前页面)

似乎您正在访问的是
HttpContext.Items
,而不是在hub方法中设置的
HubCallerContext.Items

请注意,
HubCallerContext
是一个上下文抽象,用于访问有关集线器调用方连接的信息,在您的自定义/单例服务中没有与调用相关的调用方位于集线器类之外,因此,无法通过Hub类外部的
HubCallerContext.Items
属性获取数据

如果可能的话,您可以尝试将数据保存在hub方法中的某个缓存存储中,然后可以从singleton服务中的缓存存储中获取数据