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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/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
Asp.net core 使用信号集线器的服务的推荐生命周期_Asp.net Core_Signalr_Asp.net Core Signalr - Fatal编程技术网

Asp.net core 使用信号集线器的服务的推荐生命周期

Asp.net core 使用信号集线器的服务的推荐生命周期,asp.net-core,signalr,asp.net-core-signalr,Asp.net Core,Signalr,Asp.net Core Signalr,我正在ASP.NET Core web应用程序(运行在.NET Core 2.2上)的各种控制器中使用SignalR ContentHub注入以下服务。目前,该服务被注入了一个暂时的生命周期。使用单例生命周期会更好吗?在这种情况下,瞬态生命周期是否可能是性能问题的根源 public class PushMessageService : IPushMessageService { private readonly ILogger<PushMessageService> _log

我正在ASP.NET Core web应用程序(运行在.NET Core 2.2上)的各种控制器中使用SignalR ContentHub注入以下服务。目前,该服务被注入了一个暂时的生命周期。使用单例生命周期会更好吗?在这种情况下,瞬态生命周期是否可能是性能问题的根源

public class PushMessageService : IPushMessageService
{
    private readonly ILogger<PushMessageService> _logger;
    private readonly IHubContext<ContentHub> _context;

    public PushMessageService(
        ILogger<PushMessageService> logger,
        IHubContext<ContentHub> context
    )
    {
        _logger = logger;
        _context = context;
    }    

    public async Task Push(int productId)
    {
        var msg = new Message
        {
            ProductId = productId
        };

        await SendAsync("PushMsg", productId, msg);
    }

    private async Task SendAsync<TPayload>(string methodName, int productId, TPayload payload)
    {
        await _context.Clients.Group("prod" + productId).SendAsync(methodName, payload);
    }
}
公共类PushMessageService:IPushMessageService
{
专用只读ILogger\u记录器;
私有只读IHubContext\u context;
公共推送服务(
ILogger记录器,
IHubContext上下文
)
{
_记录器=记录器;
_上下文=上下文;
}    
公共异步任务推送(int productId)
{
var msg=新消息
{
ProductId=ProductId
};
等待SendAsync(“PushMsg”,productId,msg);
}
专用异步任务SendAsync(string methodName、int productId、TPayload负载)
{
wait_context.Clients.Group(“prod”+productId).SendAsync(methodName,payload);
}
}

信号员希望为每条消息分别创建集线器。如果希望集线器位于DI中,则需要将其作为临时服务添加。您通常不应该从DI中解析集线器。如果您需要在Hub和其他组件之间共享代码,我建议您使用
IHubContext
,或者像这里一样将共享代码放在单独的DI服务中。所以我认为这应该是暂时的

Signal希望为每条消息分别创建集线器。如果希望集线器位于DI中,则需要将其作为临时服务添加。您通常不应该从DI中解析集线器。如果您需要在Hub和其他组件之间共享代码,我建议您使用
IHubContext
,或者像这里一样将共享代码放在单独的DI服务中。所以我认为这应该是暂时的

包装中心的
IHubContext
抽象是一个单例。因此,将其用作依赖项的类的生存期实际上并不重要。无论您使用的是单例生存期、作用域生存期还是瞬态生存期,您都会得到相同的实例。

包装中心的
IHubContext
抽象是单例。因此,将其用作依赖项的类的生存期实际上并不重要。无论您使用单例生命周期、作用域生命周期还是瞬态生命周期,都会得到相同的实例