C# 根据每个请求启动HUB连接并更改上下文

C# 根据每个请求启动HUB连接并更改上下文,c#,asp.net-core,signalr,signalr-hub,asp.net-core-signalr,C#,Asp.net Core,Signalr,Signalr Hub,Asp.net Core Signalr,我需要连接到控制器中的信号器核心集线器 (我不想使用依赖项注入来调用我的hub方法) 但我不想每次呼叫控制器时都启动轮毂连接 我该怎么办 我的控制器: private静态只读字符串url=”http://localhost:10580/sgr/rtc"; 公共HubConnection连接{get;private set;}=new-HubConnectionBuilder().WithUrl(url).Build(); 公共SampleDataController() { Run(async(

我需要连接到控制器中的信号器核心集线器 (我不想使用依赖项注入来调用我的hub方法) 但我不想每次呼叫控制器时都启动
轮毂连接
我该怎么办

我的控制器:

private静态只读字符串url=”http://localhost:10580/sgr/rtc";
公共HubConnection连接{get;private set;}=new-HubConnectionBuilder().WithUrl(url).Build();
公共SampleDataController()
{
Run(async()=>wait Connection.StartAsync());
}
[HttpGet(“[action]”)
公共异步任务GetConnectionId()
{
尝试
{
var str=await Connection.InvokeAsync(“GetConnectionId”);
返回Ok(str);
}
捕获(例外)
{
返回请求(“未建立连接”);
}
}
我的中心:

公共字符串GetConnectionId()
{
返回Context.ConnectionId;
}

现在,我为每个请求获得不同的
connectionId
,但我只想为客户端获得一个
connectionId

您可以尝试将
HubConnection
注册为
Singleton
类似

public class Startup
{
    private static readonly string url = "https://localhost:44379/ChatHub";
    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSingleton<HubConnection>((serviceProvider) => {
            var hubConnection = new HubConnectionBuilder().WithUrl(url).Build();
            hubConnection.StartAsync().Wait();                
            return hubConnection;
        });           
    }

}

您不想使用依赖项注入和“我不想每次都启动HUB连接”的原因是什么?您的意思是希望在应用程序启动时始终创建并保持连接吗?通常,您可以为每个请求创建连接。
public class HomeController : Controller
{
    private readonly HubConnection Connection;
    public HomeController(HubConnection connection)
    {
        Connection = connection;
    }

}