Mar*_*cey 9 c# asp.net dependency-injection signalr asp.net-core
尝试使用作为ASP.NET 5(repo)一部分的SignalR-Server对我的SignalR Hub类进行依赖注入.我试图从这个链接的教程中弄清楚这一点,但我似乎无法确定如何做到这一点,因为它GlobalHost
不再可用.这是我正在尝试做的事情:
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
services.AddSingleton<IState, State>();
}
public void Configure(IApplicationBuilder app)
{
app.UseSignalR();
}
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
如何让SignalR-Server使用MyHub(IState state)
构造函数注入所需的依赖项?
我设法通过将我的State
类添加为IState
in的单例Startup.ConfigureServices
,然后ServiceProvider
在我的 Startup.cs 类上公开提供一个属性来解决此问题。从那里,我能够GetRequiredService
在我的 SignalR Hub 类的构造函数中进行操作。这不是理想的解决方案,希望我能够在平台达到 RC 时调整它以使用构造函数/属性注入。
这是我的代码:
启动.cs
public static IServiceProvider __serviceProvider;
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
services.AddSingleton<IState, State>();
__serviceProvider = services.BuildServiceProvider();
}
public void Configure(IApplicationBuilder app)
{
app.UseSignalR();
}
Run Code Online (Sandbox Code Playgroud)
MyHub.cs
public class MyHub : Hub
{
public IState State { get; set; }
public MyHub()
{
State = (IState) Startup.__serviceProvider.GetRequiredService(typeof (IState));
}
public override Task OnConnected()
{
State.Clients = Clients;
State.Groups = Groups;
return base.OnConnected();
}
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我能够IState
在 内部设置属性并调用实现对象的方法MyHub
,从而使我能够将应用程序状态保留在内存中。
归档时间: |
|
查看次数: |
9897 次 |
最近记录: |