Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在.NET Core中使用IUserIdProvider?_C#_Asp.net Core_Signalr_Signalr Hub - Fatal编程技术网

C# 如何在.NET Core中使用IUserIdProvider?

C# 如何在.NET Core中使用IUserIdProvider?,c#,asp.net-core,signalr,signalr-hub,C#,Asp.net Core,Signalr,Signalr Hub,介绍如何使用IUserIdProvider接口。它显示了如何使用GlobalHost使SignalR使用您的用户ID提供程序。但是.Net核心的信号器没有GlobalHost。替换内容是什么?在.Net core中,您拥有注入DI的服务Microsoft.AspNet.signar.Infrastructure.IConnectionManager,您可以从中获取上下文 例如,要获取连接管理器,请使用: using Microsoft.AspNet.SignalR; using Microsof

介绍如何使用IUserIdProvider接口。它显示了如何使用GlobalHost使SignalR使用您的用户ID提供程序。但是.Net核心的信号器没有GlobalHost。替换内容是什么?

在.Net core中,您拥有注入DI的服务
Microsoft.AspNet.signar.Infrastructure.IConnectionManager
,您可以从中获取上下文

例如,要获取连接管理器,请使用:

using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Infrastructure;
using Microsoft.AspNet.Mvc;

public class TestController : Controller
{
     private IHubContext testHub;

     public TestController(IConnectionManager connectionManager)
     {
         //get connection manager using HubContext
         testHub = connectionManager.GetHubContext<TestHub>();
     }
}
使用Microsoft.AspNet.signal;
使用Microsoft.AspNet.signal.Infrastructure;
使用Microsoft.AspNet.Mvc;
公共类TestController:控制器
{
私有IHubContext测试中心;
公共测试控制器(IConnectionManager连接管理器)
{
//使用HubContext获取连接管理器
testHub=connectionManager.GetHubContext();
}
}
您甚至可以在中间件中获取上下文:

app.Use(next => (context) =>
{
    var hubContext = (IHubContext<MyHub>)context
                        .RequestServices
                        .GetServices<IHubContext<MyHub>>();
    //...
});
app.Use(下一步=>(上下文)=>
{
var hubContext=(IHubContext)context
.RequestServices
.GetServices();
//...
});
您可以阅读更多内容。

您需要实施

然后您需要在
启动
中注册它以进行依赖项注入:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR();
    services.AddSingleton<IUserIdProvider, MyCustomProvider>();
}
public void配置服务(IServiceCollection服务)
{
services.AddSignalR();
services.AddSingleton();
}

然后,
signal
将在类似

的活动中使用您的
UserIdProvider
,非常感谢。我一直在寻找的是services.AddSingleton。它起作用了
public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR();
    services.AddSingleton<IUserIdProvider, MyCustomProvider>();
}