gpt4 book ai didi

asp.net-core - 在 ASP.NET Core 中实例化 IHubContext

转载 作者:行者123 更新时间:2023-12-05 07:11:25 27 4
gpt4 key购买 nike

我在我的网络项目的不同地方使用 SignalR。在我的 Controller 和 HostedService 中,这似乎工作正常。客户端实例化与我的集线器的连接,我可以使用 IHubContext 实例与它们进行通信,注入(inject)到每个 Controller /托管服务的构造函数中。

我有另一个单例,在后台运行(没有 HosteService 或 BackgroundTask)。此类也在构造函数中注入(inject)了 IHubContext。每次它被调用时,似乎这个单例都有一个不同的 IHubContext 实例,因为这个上下文没有连接到它的客户端/组。

这个类在启动函数中被注册为:

services.AddSingleton<IServiceEventHandler<TourMonitorEvent>, TourMonitorEventHandler>();

要配置 SignalR,我在 ConfigureServices 中执行以下操作:

services.AddSignalR().AddNewtonsoftJsonProtocol();

以及配置中的以下内容:

app.UseEndpoints(endpoints =>
{
endpoints.MapHub<MyHubClass>("/hubEndpoint");
endpoints.MapControllers();
});

IHubContext 在 Controllers/Hostedservices 和单例中被注入(inject)如下:

public class MySingleton : IHandler<SomeGenericClass>
{
private readonly IHubContext<MyHubClass> _hubContext;

public MySingleton(IHubContext<MyHubClass> hubContext)
{
_hubContext = hubContext;
}
}

Controllers/HosteService 的实例化方式是否与我的 Singleton 不同,是否以可能影响 IHubContext 实例化的方式?

最佳答案

documentation 中所述:

Hubs are transient.

因此,由于您的 Singleton 不是 HostedService 或 BackgroundTask,我建议使用 DI 注入(inject)集线器。

private IHubContext<MyHubClass, IMyHubClass> MyHubClass
{
get
{
return this.serviceProvider.GetRequiredService<IHubContext<MyHubClass, IMyHubClass>>();
}
}

试试这个并验证现在的上下文是否符合您的预期。

关于asp.net-core - 在 ASP.NET Core 中实例化 IHubContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60773834/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com