尝试使用作为 ASP.NET 5 ( repo ) 一部分的 SignalR-Server 将依赖注入(inject)到我的 SignalR Hub 类中。我试图从 this link 的教程中弄清楚这一点。但鉴于 GlobalHost
不再可用,我似乎无法确定如何执行此操作。这是我正在尝试做的事情:
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
services.AddSingleton<IState, State>();
}
public void Configure(IApplicationBuilder app)
{
app.UseSignalR();
}
MyHub.cs
public class MyHub : Hub
{
public IState State { get; set; }
// SignalR accepts this parameterless ctor
public MyHub()
{
}
// SignalR won't use this because it has a parameter
public MyHub(IState state)
{
State = state;
}
}
我怎样才能得到 SignalR-Server使用 MyHub(IState state)
构造函数注入(inject)所需的依赖项?
最佳答案
最好的方法(对于 Asp.Net 5)为接收 IServiceProvider 的 DefaultDependencyResolver 创建自定义解析器:
public class CustomSignalRDependencyResolver : DefaultDependencyResolver
{
private readonly IServiceProvider _serviceProvider;
public CustomSignalRDependencyResolver(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public override object GetService(Type serviceType)
{
var service = _serviceProvider.GetService(serviceType);
return service ?? base.GetService(serviceType);
}
}
然后在 StartUp 类上
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IState, State>();
//... other services
GlobalHost.DependencyResolver = new CustomSignalRDependencyResolver(services.BuildServiceProvider());
}
关于c# - 如何在 ASP.NET 5 (vNext) 中设置 SignalR Hub 依赖注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32150163/