我似乎无法看到以下代码工作。我正在做的是在ConfigureServies
呼叫_serviceProvider.GetService<IConnectionManager>();
,并将其保存在一个静态字段,并试图稍后使用它来访问IConnectionManager
,随后致电GetHubContext<MyHub>
,以便我可以向所有连接的客户端广播消息。获取SignalR IConnectionManager GetHubContext在aspnet核心中的Startup.cs中工作
_connectionManager.GetHubContext<MyHub>().Clients.All.doSomethingOnClients();
就像测试一样,webapi控制器中的同一行代码行为方法工作正常! (通过构造函数注入IConnectionManager)。这让我相信我的信号设置非常好,就是我在初创课上得到的东西在某个地方是错的。 GetHashCode
在IConnectionManager
在启动和我的控制器给出不同的哈希码。我只需要在ApplicationLifetime OnStartUp上挂钩...
你能帮我理解哪里出了问题吗?
public class Startup
{
public static IServiceProvider _serviceProvider;
public static IConnectionManager _connectionManager;
private readonly IHostingEnvironment _hostingEnv;
public IConfigurationRoot Configuration { get; }
public Startup (IHostingEnvironment env)
{
// ...
}
public void ConfigureServices (IServiceCollection services)
{
// ....
services.AddSignalR(options => {
options.Hubs.EnableDetailedErrors = true;
});
services.AddMvc();
// ...
_serviceProvider = services.BuildServiceProvider();
_connectionManager = _serviceProvider.GetService<IConnectionManager>();
}
public void Configure (IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime applicationLifetime)
{
// ...
applicationLifetime.ApplicationStarted.Register(OnStartUp);
// ...
app.UseMvc(routes => {
routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
});
app.UseSignalR();
// ...
}
public void OnStartUp()
{
var x = _serviceProvider.GetService<MySingletonObject>();
// MySingletonObject has a VersionUpdated event handler
x.VersionUpdated += OnUpdate;
}
private void OnUpdate (object sender, EventArgs e)
{
// I get here everytime my singleton gets updated fine!
// but the following does not work
_connectionManager.GetHubContext<MyHub>().Clients.All.doSomethingOnClients();
}
}
我使用 “Microsoft.AspNetCore.SignalR.Server/0.2.0-alpha1-22362”。
[如何在ASP.NET Core中获取SignalR Hub上下文](https://stackoverflow.com/a/46319153/428061) – Soren