后台启动时Furion RootServices NULL值

This commit is contained in:
2248356998 qq.com
2023-04-03 15:19:59 +08:00
parent d3650f1145
commit 24a7f3a320
6 changed files with 22 additions and 19 deletions

View File

@@ -113,7 +113,7 @@ namespace ThingsGateway.Mqtt
using var serviceScope = _scopeFactory.CreateScope();
_globalCollectDeviceData = serviceScope.ServiceProvider.GetService<GlobalCollectDeviceData>();
_rpcCore = serviceScope.ServiceProvider.GetService<RpcCore>();
collectDeviceHostService = serviceScope.ServiceProvider.GetBackgroundService<CollectDeviceHostService>();
collectDeviceHostService = serviceScope.GetBackgroundService<CollectDeviceHostService>();
_globalCollectDeviceData.CollectDevices.ForEach(a =>
{

View File

@@ -13,6 +13,7 @@
}
/// <inheritdoc/>
[OperDesc("编辑网关配置项")]
public async Task EditBatch(List<DevConfig> devConfigs)
{
if (devConfigs.Count > 0)

View File

@@ -29,8 +29,8 @@ namespace ThingsGateway.Web.Foundation
{
_scopeFactory = scopeFactory;
using var serviceScope = _scopeFactory.CreateScope();
_collectDeviceHostService = serviceScope.ServiceProvider.GetBackgroundService<CollectDeviceHostService>();
_alarmHostService = serviceScope.ServiceProvider.GetBackgroundService<AlarmHostService>();
_collectDeviceHostService = serviceScope.GetBackgroundService<CollectDeviceHostService>();
_alarmHostService = serviceScope.GetBackgroundService<AlarmHostService>();
}
AlarmHostService _alarmHostService { get; set; }

View File

@@ -9,16 +9,16 @@ namespace ThingsGateway.Web.Foundation
/// </summary>
public static class ServiceExtension
{
///// <summary>
///// 获取后台服务
///// </summary>
//public static T GetBackgroundService<T>(this IServiceScopeFactory @this) where T : class, IHostedService
//{
// var hostedService = @this.CreateScope().ServiceProvider.GetServices<IHostedService>().FirstOrDefault(it => it is T) as T;
// return hostedService;
//}
/// <summary>
/// 获取后台服务
/// IServiceScope获取后台服务
/// </summary>
public static T GetBackgroundService<T>(this IServiceScope @this) where T : class, IHostedService
{
var hostedService = @this.ServiceProvider.GetServices<IHostedService>().FirstOrDefault(it => it is T) as T;
return hostedService;
}
/// <summary>
/// RootServices获取后台服务
/// </summary>
public static T GetBackgroundService<T>(this object @this) where T : class, IHostedService
{

View File

@@ -122,11 +122,12 @@ public class CollectDeviceHostService : BackgroundService
/// </summary>
public void StartOtherHostService()
{
var alarmHostService = _scopeFactory.GetBackgroundService<AlarmHostService>();
var valueHisHostService = _scopeFactory.GetBackgroundService<ValueHisHostService>();
using var scope = _scopeFactory.CreateScope();
var alarmHostService = scope.GetBackgroundService<AlarmHostService>();
var valueHisHostService = scope.GetBackgroundService<ValueHisHostService>();
alarmHostService?.Start();
valueHisHostService?.Start();
var uploadDeviceHostService = _scopeFactory.GetBackgroundService<UploadDeviceHostService>();
var uploadDeviceHostService = scope.GetBackgroundService<UploadDeviceHostService>();
uploadDeviceHostService.StartDeviceThread();
}
/// <summary>
@@ -136,13 +137,14 @@ public class CollectDeviceHostService : BackgroundService
{
if (oldDeviceRuntime?.Count > 0)
{
using var scope = _scopeFactory.CreateScope();
var alarmHostService = _scopeFactory.GetBackgroundService<AlarmHostService>();
var valueHisHostService = _scopeFactory.GetBackgroundService<ValueHisHostService>();
var alarmHostService = scope.GetBackgroundService<AlarmHostService>();
var valueHisHostService = scope.GetBackgroundService<ValueHisHostService>();
alarmHostService?.Stop(oldDeviceRuntime);
valueHisHostService?.Stop(oldDeviceRuntime);
var uploadDeviceHostService = _scopeFactory.GetBackgroundService<UploadDeviceHostService>();
var uploadDeviceHostService = scope.GetBackgroundService<UploadDeviceHostService>();
uploadDeviceHostService.RemoveDeviceThread();
}

View File

@@ -29,7 +29,7 @@ public class RpcCore : ISingleton
_logger = logger;
using var serviceScope = scopeFactory.CreateScope();
_globalCollectDeviceData = serviceScope.ServiceProvider.GetService<GlobalCollectDeviceData>();
_collectDeviceHostService = serviceScope.ServiceProvider.GetBackgroundService<CollectDeviceHostService>();
_collectDeviceHostService = serviceScope.GetBackgroundService<CollectDeviceHostService>();
Task.Factory.StartNew(RpcLogInsert);
}
private ConcurrentQueue<RpcLog> _logQueues = new();