NewLife/Stardust

代码整理
智能大石头 authored at 2025-08-26 12:39:04
78633ab
Tree
1 Parent(s) 8b5aca5
Summary: 4 changed files with 71 additions and 137 deletions.
Modified +26 -44
Modified +5 -17
Modified +20 -41
Modified +20 -35
Modified +26 -44
diff --git a/Stardust.Server/Controllers/AppController.cs b/Stardust.Server/Controllers/AppController.cs
index 4cd09b1..cd519cb 100644
--- a/Stardust.Server/Controllers/AppController.cs
+++ b/Stardust.Server/Controllers/AppController.cs
@@ -21,35 +21,17 @@ namespace Stardust.Server.Controllers;
 /// <summary>应用接口控制器</summary>
 [ApiController]
 [Route("[controller]")]
-public class AppController : BaseController
+public class AppController(TokenService tokenService, RegistryService registryService, DeployService deployService, AppSessionManager sessionManager, StarServerSetting setting, IServiceProvider serviceProvider, ITracer tracer) : BaseController(serviceProvider)
 {
     private App _app;
     private String _clientId;
-    private readonly TokenService _tokenService;
-    private readonly RegistryService _registryService;
-    private readonly DeployService _deployService;
-    private readonly ITracer _tracer;
-    private readonly AppQueueService _queue;
-    private readonly AppSessionManager _sessionManager;
-    private readonly StarServerSetting _setting;
-
-    public AppController(TokenService tokenService, RegistryService registryService, DeployService deployService, AppQueueService queue, AppSessionManager sessionManager, StarServerSetting setting, IServiceProvider serviceProvider, ITracer tracer) : base(serviceProvider)
-    {
-        _tokenService = tokenService;
-        _registryService = registryService;
-        _deployService = deployService;
-        _queue = queue;
-        _sessionManager = sessionManager;
-        _setting = setting;
-        _tracer = tracer;
-    }
 
     #region 令牌验证
     protected override Boolean OnAuthorize(String token)
     {
         ManageProvider.UserHost = UserHost;
 
-        var (jwt, app) = _tokenService.DecodeToken(token, _setting.TokenSecret);
+        var (jwt, app) = tokenService.DecodeToken(token, setting.TokenSecret);
         _app = app;
         _clientId = jwt.Id;
 
@@ -75,29 +57,29 @@ public class AppController : BaseController
     [HttpPost(nameof(Login))]
     public LoginResponse Login(AppModel model)
     {
-        var set = _setting;
+        var set = setting;
         var ip = UserHost;
         var app = App.FindByName(model.AppId);
         var oldSecret = app?.Secret;
         _app = app;
 
         // 设备不存在或者验证失败,执行注册流程
-        if (app != null && !_registryService.Auth(app, model.Secret, ip, model.ClientId, set))
+        if (app != null && !registryService.Auth(app, model.Secret, ip, model.ClientId, set))
         {
             app = null;
         }
 
         var clientId = model.ClientId;
-        app ??= _registryService.Register(model.AppId, model.Secret, set.AppAutoRegister, ip, clientId);
+        app ??= registryService.Register(model.AppId, model.Secret, set.AppAutoRegister, ip, clientId);
         _app = app ?? throw new ApiException(ApiCode.Unauthorized, "应用鉴权失败");
 
-        _registryService.Login(app, model, ip, _setting);
+        registryService.Login(app, model, ip, setting);
 
-        var tokenModel = _tokenService.IssueToken(app.Name, set.TokenSecret, set.TokenExpire, clientId);
+        var tokenModel = tokenService.IssueToken(app.Name, set.TokenSecret, set.TokenExpire, clientId);
 
-        var online = _registryService.SetOnline(_app, model, ip, clientId, Token);
+        var online = registryService.SetOnline(_app, model, ip, clientId, Token);
 
-        _deployService.UpdateDeployNode(online);
+        deployService.UpdateDeployNode(online);
 
         var rs = new LoginResponse
         {
@@ -122,10 +104,10 @@ public class AppController : BaseController
     public String Register(AppModel inf)
     {
         var ip = UserHost;
-        var online = _registryService.SetOnline(_app, inf, ip, inf.ClientId, Token);
+        var online = registryService.SetOnline(_app, inf, ip, inf.ClientId, Token);
         _app.WriteHistory(nameof(Register), true, inf.ToJson(), inf.Version, ip, inf.ClientId);
 
-        _deployService.UpdateDeployNode(online);
+        deployService.UpdateDeployNode(online);
 
         return _app?.ToString();
     }
@@ -137,7 +119,7 @@ public class AppController : BaseController
     [HttpPost(nameof(Logout))]
     public LoginResponse Logout(String reason)
     {
-        if (_app != null) _registryService.Logout(_app, _clientId, reason, UserHost);
+        if (_app != null) registryService.Logout(_app, _clientId, reason, UserHost);
 
         return new LoginResponse
         {
@@ -157,9 +139,9 @@ public class AppController : BaseController
         };
 
         var ip = UserHost;
-        var online = _registryService.Ping(app, inf, ip, _clientId, Token);
+        var online = registryService.Ping(app, inf, ip, _clientId, Token);
         AppMeter.WriteData(app, inf, "Ping", _clientId, ip);
-        _deployService.UpdateDeployNode(online);
+        deployService.UpdateDeployNode(online);
 
         if (app != null)
         {
@@ -167,11 +149,11 @@ public class AppController : BaseController
 
             // 令牌有效期检查,10分钟内到期的令牌,颁发新令牌,以获取业务的连续性。
             //todo 这里将来由客户端提交刷新令牌,才能颁发新的访问令牌。
-            var set = _setting;
-            var tm = _tokenService.ValidAndIssueToken(app.Name, Token, set.TokenSecret, set.TokenExpire, _clientId);
+            var set = setting;
+            var tm = tokenService.ValidAndIssueToken(app.Name, Token, set.TokenSecret, set.TokenExpire, _clientId);
             if (tm != null)
             {
-                using var span = _tracer?.NewSpan("RefreshAppToken", new { app.Name, app.DisplayName });
+                using var span = tracer?.NewSpan("RefreshAppToken", new { app.Name, app.DisplayName });
 
                 rs.Token = tm.AccessToken;
 
@@ -182,7 +164,7 @@ public class AppController : BaseController
             {
                 // 拉取命令
                 if (ver.Build >= 2024 && ver.Revision >= 801)
-                    rs.Commands = _registryService.AcquireAppCommands(app.Id);
+                    rs.Commands = registryService.AcquireAppCommands(app.Id);
             }
         }
 
@@ -249,7 +231,7 @@ public class AppController : BaseController
             Log = this,
             SetOnline = online => SetOnline(clientId, online)
         };
-        _sessionManager.Add(session);
+        sessionManager.Add(session);
 
         await session.WaitAsync(HttpContext, cancellationToken).ConfigureAwait(false);
     }
@@ -291,7 +273,7 @@ public class AppController : BaseController
         if (app.AllowControlNodes != "*" && !target.Name.EqualIgnoreCase(app.AllowControlNodes.Split(",")))
             throw new ApiException(ApiCode.Forbidden, $"[{app}]无权操作应用[{target}]!\n安全设计需要,默认禁止所有应用向其它应用发送控制指令。\n可在注册中心应用系统中修改[{app}]的可控节点,添加[{target.Name}],或者设置为*所有应用。");
 
-        var cmd = await _registryService.SendCommand(target, clientId, model, app + "");
+        var cmd = await registryService.SendCommand(target, clientId, model, app + "");
 
         return cmd.Id;
     }
@@ -304,7 +286,7 @@ public class AppController : BaseController
     {
         if (_app == null) throw new ApiException(ApiCode.Unauthorized, "节点未登录");
 
-        var cmd = _registryService.CommandReply(_app, model);
+        var cmd = registryService.CommandReply(_app, model);
 
         return cmd != null ? 1 : 0;
     }
@@ -330,12 +312,12 @@ public class AppController : BaseController
         var app = _app;
         var info = GetService(model.ServiceName);
 
-        var (svc, changed) = _registryService.RegisterService(app, info, model, UserHost);
+        var (svc, changed) = registryService.RegisterService(app, info, model, UserHost);
 
         // 发布消息通知消费者
         if (changed)
         {
-            await _registryService.NotifyConsumers(svc, "registry/register", app + "");
+            await registryService.NotifyConsumers(svc, "registry/register", app + "");
         }
 
         return svc?.ToModel();
@@ -347,12 +329,12 @@ public class AppController : BaseController
         var app = _app;
         var info = GetService(model.ServiceName);
 
-        var (svc, changed) = _registryService.UnregisterService(app, info, model, UserHost);
+        var (svc, changed) = registryService.UnregisterService(app, info, model, UserHost);
 
         // 发布消息通知消费者
         if (changed)
         {
-            await _registryService.NotifyConsumers(svc, "registry/unregister", app + "");
+            await registryService.NotifyConsumers(svc, "registry/unregister", app + "");
         }
 
         return svc?.ToModel();
@@ -401,7 +383,7 @@ public class AppController : BaseController
         info.Consumers = consumes.Count;
         info.Save();
 
-        var models = _registryService.ResolveService(info, model, svc.Scope);
+        var models = registryService.ResolveService(info, model, svc.Scope);
 
         // 记录应用消费服务得到的地址
         svc.Address = models?.Select(e => new { e.Address }).ToArray().ToJson();
Modified +5 -17
diff --git a/Stardust.Server/Controllers/DeployController.cs b/Stardust.Server/Controllers/DeployController.cs
index e12bbe0..6aa835d 100644
--- a/Stardust.Server/Controllers/DeployController.cs
+++ b/Stardust.Server/Controllers/DeployController.cs
@@ -14,29 +14,17 @@ namespace Stardust.Server.Controllers;
 /// <summary>发布中心服务</summary>
 [ApiFilter]
 [Route("[controller]/[action]")]
-public class DeployController : BaseController
+public class DeployController(DeployService deployService, NodeService nodeService, StarServerSetting setting, IServiceProvider serviceProvider) : BaseController(serviceProvider)
 {
     private Node _node;
     private String _clientId;
-    private readonly NodeService _nodeService;
-    private readonly DeployService _deployService;
-    private readonly TokenService _tokenService;
-    private readonly StarServerSetting _setting;
-
-    public DeployController(DeployService deployService, NodeService nodeService, TokenService tokenService, StarServerSetting setting, IServiceProvider serviceProvider) : base(serviceProvider)
-    {
-        _deployService = deployService;
-        _nodeService = nodeService;
-        _tokenService = tokenService;
-        _setting = setting;
-    }
 
     #region 令牌验证
     protected override Boolean OnAuthorize(String token)
     {
         ManageProvider.UserHost = UserHost;
 
-        var (jwt, node, ex) = _nodeService.DecodeToken(token, _setting.TokenSecret);
+        var (jwt, node, ex) = nodeService.DecodeToken(token, setting.TokenSecret);
         _node = node;
         _clientId = jwt.Id;
         if (ex != null) throw ex;
@@ -75,7 +63,7 @@ public class DeployController : BaseController
             // 修正旧的用户名
             deployNode.FixOldUserName();
 
-            var inf = _deployService.BuildDeployInfo(deployNode, _node);
+            var inf = deployService.BuildDeployInfo(deployNode, _node);
             if (inf == null) continue;
 
             rs.Add(inf);
@@ -165,7 +153,7 @@ public class DeployController : BaseController
     /// <param name="inf"></param>
     /// <returns></returns>
     [HttpPost]
-    public Int32 Ping([FromBody] AppInfo inf) => _deployService.Ping(_node, inf, UserHost);
+    public Int32 Ping([FromBody] AppInfo inf) => deployService.Ping(_node, inf, UserHost);
 
     /// <summary>获取分配到本节点的应用发布任务</summary>
     public BuildTask GetBuildTask(Int32 deployId, String deployName, String appName)
@@ -211,6 +199,6 @@ public class DeployController : BaseController
     }
 
     #region 辅助
-    private void WriteHistory(Int32 appId, String action, Boolean success, String remark) => _deployService.WriteHistory(appId, _node?.ID ?? 0, action, success, remark, UserHost);
+    private void WriteHistory(Int32 appId, String action, Boolean success, String remark) => deployService.WriteHistory(appId, _node?.ID ?? 0, action, success, remark, UserHost);
     #endregion
 }
\ No newline at end of file
Modified +20 -41
diff --git a/Stardust.Server/Controllers/NodeController.cs b/Stardust.Server/Controllers/NodeController.cs
index 8d6943a..fd71147 100644
--- a/Stardust.Server/Controllers/NodeController.cs
+++ b/Stardust.Server/Controllers/NodeController.cs
@@ -22,33 +22,17 @@ namespace Stardust.Server.Controllers;
 
 [ApiController]
 [Route("[controller]")]
-public class NodeController : BaseController
+public class NodeController(NodeService nodeService, TokenService tokenService, NodeSessionManager sessionManager, StarServerSetting setting, IServiceProvider serviceProvider, ITracer tracer, IOptions<JsonOptions> jsonOptions) : BaseController(serviceProvider)
 {
     private Node _node;
     private String _clientId;
-    private readonly ITracer _tracer;
-    private readonly IOptions<JsonOptions> _jsonOptions;
-    private readonly NodeService _nodeService;
-    private readonly TokenService _tokenService;
-    private readonly NodeSessionManager _sessionManager;
-    private readonly StarServerSetting _setting;
-
-    public NodeController(NodeService nodeService, TokenService tokenService, NodeSessionManager sessionManager, StarServerSetting setting, IServiceProvider serviceProvider, ITracer tracer, IOptions<JsonOptions> jsonOptions) : base(serviceProvider)
-    {
-        _tracer = tracer;
-        _jsonOptions = jsonOptions;
-        _nodeService = nodeService;
-        _tokenService = tokenService;
-        _sessionManager = sessionManager;
-        _setting = setting;
-    }
 
     #region 令牌验证
     protected override Boolean OnAuthorize(String token)
     {
         ManageProvider.UserHost = UserHost;
 
-        var (jwt, node, ex) = _nodeService.DecodeToken(token, _setting.TokenSecret);
+        var (jwt, node, ex) = nodeService.DecodeToken(token, setting.TokenSecret);
         _node = node;
         _clientId = jwt.Id;
         if (ex != null) throw ex;
@@ -73,7 +57,7 @@ public class NodeController : BaseController
     public LoginResponse Login(JsonElement data)
     {
         // 由于客户端的多样性,这里需要手工控制序列化。某些客户端的节点信息跟密钥信息在同一层级。
-        var options = _jsonOptions.Value.JsonSerializerOptions;
+        var options = jsonOptions.Value.JsonSerializerOptions;
         var inf = data.Deserialize<LoginInfo>(options);
         if (inf.Node == null || inf.Node.UUID.IsNullOrEmpty() && inf.Node.MachineGuid.IsNullOrEmpty() && inf.Node.Macs.IsNullOrEmpty())
         {
@@ -102,16 +86,16 @@ public class NodeController : BaseController
         }
 
         // 设备不存在或者验证失败,执行注册流程
-        if (node != null && !_nodeService.Auth(node, inf.Secret, inf, ip, _setting))
+        if (node != null && !nodeService.Auth(node, inf.Secret, inf, ip, setting))
         {
             node = null;
         }
 
-        node ??= _nodeService.Register(inf, ip, _setting);
+        node ??= nodeService.Register(inf, ip, setting);
 
         if (node == null) throw new ApiException(ApiCode.Unauthorized, "节点鉴权失败");
 
-        var tokenModel = _nodeService.Login(node, inf, ip, _setting);
+        var tokenModel = nodeService.Login(node, inf, ip, setting);
 
         var rs = new LoginResponse
         {
@@ -136,7 +120,7 @@ public class NodeController : BaseController
     [HttpPost(nameof(Logout))]
     public LoginResponse Logout(String reason)
     {
-        if (_node != null) _nodeService.Logout(_node, reason, UserHost);
+        if (_node != null) nodeService.Logout(_node, reason, UserHost);
 
         return new LoginResponse
         {
@@ -157,7 +141,7 @@ public class NodeController : BaseController
             ServerTime = DateTime.UtcNow.ToLong(),
         };
 
-        var online = _nodeService.Ping(node, inf, Token, UserHost);
+        var online = nodeService.Ping(node, inf, Token, UserHost);
 
         if (node != null)
         {
@@ -169,11 +153,11 @@ public class NodeController : BaseController
 
             // 令牌有效期检查,10分钟内到期的令牌,颁发新令牌,以获取业务的连续性。
             //todo 这里将来由客户端提交刷新令牌,才能颁发新的访问令牌。
-            var set = _setting;
-            var tm = _tokenService.ValidAndIssueToken(node.Code, Token, set.TokenSecret, set.TokenExpire, _clientId);
+            var set = setting;
+            var tm = tokenService.ValidAndIssueToken(node.Code, Token, set.TokenSecret, set.TokenExpire, _clientId);
             if (tm != null)
             {
-                using var span = _tracer?.NewSpan("RefreshNodeToken", new { node.Code, node.Name });
+                using var span = tracer?.NewSpan("RefreshNodeToken", new { node.Code, node.Name });
 
                 rs.Token = tm.AccessToken;
 
@@ -184,7 +168,7 @@ public class NodeController : BaseController
             {
                 // 拉取命令
                 if (ver.Build >= 2023 && ver.Revision >= 107)
-                    rs.Commands = _nodeService.AcquireNodeCommands(node.ID);
+                    rs.Commands = nodeService.AcquireNodeCommands(node.ID);
             }
         }
 
@@ -210,10 +194,10 @@ public class NodeController : BaseController
         var p = uri.IndexOf('/', "https://".Length);
         if (p > 0) uri = uri[..p];
 
-        var pv = _nodeService.Upgrade(node, channel, UserHost);
+        var pv = nodeService.Upgrade(node, channel, UserHost);
         if (pv == null)
         {
-            _nodeService.CheckDotNet(node, new Uri(uri), UserHost);
+            nodeService.CheckDotNet(node, new Uri(uri), UserHost);
 
             return null;
         }
@@ -332,7 +316,7 @@ public class NodeController : BaseController
     /// <param name="model">服务</param>
     /// <returns></returns>
     [HttpPost(nameof(CommandReply))]
-    public Int32 CommandReply(CommandReplyModel model) => _node == null ? throw new ApiException(ApiCode.Unauthorized, "节点未登录") : _nodeService.CommandReply(_node, model, Token);
+    public Int32 CommandReply(CommandReplyModel model) => _node == null ? throw new ApiException(ApiCode.Unauthorized, "节点未登录") : nodeService.CommandReply(_node, model, Token);
     #endregion
 
     #region 下行通知
@@ -344,11 +328,10 @@ public class NodeController : BaseController
         if (HttpContext.WebSockets.IsWebSocketRequest)
         {
             var ip = UserHost;
-            var token = (HttpContext.Request.Headers["Authorization"] + "").TrimStart("Bearer ");
             using var socket = await HttpContext.WebSockets.AcceptWebSocketAsync();
             try
             {
-                await HandleNotify(socket, token, ip, HttpContext.RequestAborted);
+                await HandleNotify(socket, _node, Token, ip, HttpContext.RequestAborted);
             }
             catch (Exception ex)
             {
@@ -364,26 +347,22 @@ public class NodeController : BaseController
         }
     }
 
-    private async Task HandleNotify(WebSocket socket, String token, String ip, CancellationToken cancellationToken)
+    private async Task HandleNotify(WebSocket socket, Node node, String token, String ip, CancellationToken cancellationToken)
     {
-        var (_, node, error) = _nodeService.DecodeToken(token, _setting.TokenSecret);
-        _node = node ?? throw new ApiException(ApiCode.Unauthorized, $"未登录![ip={ip}]");
-        if (error != null) throw error;
-
         using var session = new NodeCommandSession(socket)
         {
             Code = node.Code,
             Log = this,
             SetOnline = online => SetOnline(node, token, ip, online)
         };
-        _sessionManager.Add(session);
+        sessionManager.Add(session);
 
         await session.WaitAsync(HttpContext, cancellationToken).ConfigureAwait(false);
     }
 
     private void SetOnline(Node node, String token, String ip, Boolean online)
     {
-        var olt = _nodeService.GetOrAddOnline(node, token, ip);
+        var olt = nodeService.GetOrAddOnline(node, token, ip);
         if (olt != null)
         {
             olt.WebSocket = online;
@@ -402,7 +381,7 @@ public class NodeController : BaseController
         if (model.Code.IsNullOrEmpty()) throw new ArgumentNullException(nameof(model.Code), "必须指定节点");
         if (model.Command.IsNullOrEmpty()) throw new ArgumentNullException(nameof(model.Command));
 
-        var cmd = await _nodeService.SendCommand(model, token, _setting);
+        var cmd = await nodeService.SendCommand(model, token, setting);
 
         return cmd.Id;
     }
Modified +20 -35
diff --git a/Stardust.Server/Services/NodeService.cs b/Stardust.Server/Services/NodeService.cs
index 78bdea0..4eba964 100644
--- a/Stardust.Server/Services/NodeService.cs
+++ b/Stardust.Server/Services/NodeService.cs
@@ -14,23 +14,8 @@ using XCode.Configuration;
 
 namespace Stardust.Server.Services;
 
-public class NodeService
+public class NodeService(TokenService tokenService, IPasswordProvider passwordProvider, NodeSessionManager sessionManager, ICacheProvider cacheProvider, ITracer tracer)
 {
-    private readonly TokenService _tokenService;
-    private readonly IPasswordProvider _passwordProvider;
-    private readonly NodeSessionManager _sessionManager;
-    private readonly ICacheProvider _cacheProvider;
-    private readonly ITracer _tracer;
-
-    public NodeService(TokenService tokenService, IPasswordProvider passwordProvider, NodeSessionManager sessionManager, ICacheProvider cacheProvider, ITracer tracer)
-    {
-        _tokenService = tokenService;
-        _passwordProvider = passwordProvider;
-        _sessionManager = sessionManager;
-        _cacheProvider = cacheProvider;
-        _tracer = tracer;
-    }
-
     #region 注册&登录
     public Boolean Auth(Node node, String secret, LoginInfo inf, String ip, StarServerSetting setting)
     {
@@ -47,12 +32,12 @@ public class NodeService
         if (node.Secret == secret) return true;
         //return !secret.IsNullOrEmpty() && !secret.IsNullOrEmpty() && (node.Secret == secret || node.Secret.MD5() == secret);
 
-        if (setting.SaltTime > 0 && _passwordProvider is SaltPasswordProvider saltProvider)
+        if (setting.SaltTime > 0 && passwordProvider is SaltPasswordProvider saltProvider)
         {
             // 使用盐值偏差时间,允许客户端时间与服务端时间有一定偏差
             saltProvider.SaltTime = setting.SaltTime;
         }
-        if (secret.IsNullOrEmpty() || !_passwordProvider.Verify(node.Secret, secret))
+        if (secret.IsNullOrEmpty() || !passwordProvider.Verify(node.Secret, secret))
         {
             WriteHistory(node, "节点鉴权", false, "密钥校验失败", ip);
             return false;
@@ -105,7 +90,7 @@ public class NodeService
         node.Login(inf.Node, ip);
 
         // 设置令牌
-        var tokenModel = _tokenService.IssueToken(node.Code, setting.TokenSecret, setting.TokenExpire, inf.ClientId);
+        var tokenModel = tokenService.IssueToken(node.Code, setting.TokenSecret, setting.TokenExpire, inf.ClientId);
 
         // 在线记录
         var olt = GetOrAddOnline(node, tokenModel.AccessToken, ip);
@@ -252,7 +237,7 @@ public class NodeService
         //var ip = UserHost;
         if (!IsMatchWhiteIP(set.WhiteIP, ip)) throw new ApiException(ApiCode.Forbidden, "非法来源,禁止注册");
 
-        using var span = _tracer?.NewSpan(nameof(AutoRegister), new { inf.ProductCode, inf.Node });
+        using var span = tracer?.NewSpan(nameof(AutoRegister), new { inf.ProductCode, inf.Node });
 
         var di = inf.Node;
         var code = BuildCode(di, inf.ProductCode, set);
@@ -389,7 +374,7 @@ public class NodeService
 
     private String BuildCode(NodeInfo di, String productCode, StarServerSetting set)
     {
-        using var span = _tracer?.NewSpan(nameof(BuildCode), new { set.NodeCodeFormula });
+        using var span = tracer?.NewSpan(nameof(BuildCode), new { set.NodeCodeFormula });
 
         //var set = Setting.Current;
         //var uid = $"{di.UUID}@{di.MachineGuid}@{di.Macs}";
@@ -517,7 +502,7 @@ public class NodeService
         // 是否有本节点
         if (!_commands.Any(e => e.NodeID == nodeId)) return null;
 
-        using var span = _tracer?.NewSpan(nameof(AcquireNodeCommands), new { nodeId });
+        using var span = tracer?.NewSpan(nameof(AcquireNodeCommands), new { nodeId });
 
         var cmds = NodeCommand.AcquireCommands(nodeId, 100);
         if (cmds.Count == 0) return null;
@@ -569,7 +554,7 @@ public class NodeService
     {
         //var sid = $"{node.ID}@{ip}";
         var sid = node.Code;
-        var olt = _cacheProvider.InnerCache.Get<NodeOnline>($"NodeOnline:{sid}");
+        var olt = cacheProvider.InnerCache.Get<NodeOnline>($"NodeOnline:{sid}");
         if (olt != null)
         {
             //_cacheProvider.InnerCache.SetExpire($"NodeOnline:{sid}", TimeSpan.FromSeconds(120));
@@ -624,7 +609,7 @@ public class NodeService
     public void UpdateOnline(Node node, NodeOnline online)
     {
         var sid = node.Code;
-        _cacheProvider.InnerCache.Set($"NodeOnline:{sid}", online, 120);
+        cacheProvider.InnerCache.Set($"NodeOnline:{sid}", online, 120);
     }
 
     /// <summary>删除在线状态</summary>
@@ -632,7 +617,7 @@ public class NodeService
     public void RemoveOnline(Node node)
     {
         var sid = node.Code;
-        _cacheProvider.InnerCache.Remove($"NodeOnline:{sid}");
+        cacheProvider.InnerCache.Remove($"NodeOnline:{sid}");
     }
     #endregion
 
@@ -651,10 +636,10 @@ public class NodeService
 
         // 通知命令发布者,指令已完成
         var topic = $"nodereply:{cmd.Id}";
-        var q = _cacheProvider.GetQueue<CommandReplyModel>(topic);
+        var q = cacheProvider.GetQueue<CommandReplyModel>(topic);
         q.Add(model);
 
-        _cacheProvider.Cache.SetExpire(topic, TimeSpan.FromSeconds(60));
+        cacheProvider.Cache.SetExpire(topic, TimeSpan.FromSeconds(60));
 
         return 1;
     }
@@ -675,7 +660,7 @@ public class NodeService
         list = list.Where(e => e.ProductCode.IsNullOrEmpty() || e.ProductCode.EqualIgnoreCase(node.ProductCode)).ToList();
         if (list.Count == 0) return null;
 
-        using var span = _tracer?.NewSpan(nameof(Upgrade), new { node.Name, node.Code, node.Runtime, node.Framework, node.Frameworks, ip, vers = list.Count });
+        using var span = tracer?.NewSpan(nameof(Upgrade), new { node.Name, node.Code, node.Runtime, node.Framework, node.Frameworks, ip, vers = list.Count });
 
         // 应用过滤规则,使用最新的一个版本
         var pv = list.OrderByDescending(e => e.ID).FirstOrDefault(e => e.Version != node.LastVersion && e.Match(node));
@@ -704,7 +689,7 @@ public class NodeService
         var list = NodeVersion.GetValids(0).Where(e => e.ProductCode.EqualIgnoreCase("dotNet")).ToList();
         if (list.Count == 0) return null;
 
-        using var span = _tracer?.NewSpan(nameof(CheckDotNet), new { node.Name, node.Code, node.Runtime, node.Framework, node.Frameworks, ip, vers = list.Count });
+        using var span = tracer?.NewSpan(nameof(CheckDotNet), new { node.Name, node.Code, node.Runtime, node.Framework, node.Frameworks, ip, vers = list.Count });
 
         // 应用过滤规则
         list = list.OrderByDescending(e => e.ID).Where(e => e.Match(node)).ToList();
@@ -733,8 +718,8 @@ public class NodeService
 
             // 检查是否已经升级过这个版本
             var key = $"nodeNet:{node.Code}-{fmodel.Version}";
-            if (_cacheProvider.Cache.Get<String>(key) == pv.Version) return null;
-            _cacheProvider.Cache.Set(key, pv.Version, 600);
+            if (cacheProvider.Cache.Get<String>(key) == pv.Version) return null;
+            cacheProvider.Cache.Set(key, pv.Version, 600);
 
             var model = new CommandInModel
             {
@@ -767,7 +752,7 @@ public class NodeService
         var node = Node.FindByCode(model.Code);
         if (node == null) throw new ArgumentOutOfRangeException(nameof(model.Code), "无效节点");
 
-        var (_, app) = _tokenService.DecodeToken(token, setting.TokenSecret);
+        var (_, app) = tokenService.DecodeToken(token, setting.TokenSecret);
         if (app == null || app.AllowControlNodes.IsNullOrEmpty()) throw new ApiException(ApiCode.Unauthorized, "无权操作!");
 
         if (app.AllowControlNodes != "*" && !node.Code.EqualIgnoreCase(app.AllowControlNodes.Split(",")))
@@ -803,17 +788,17 @@ public class NodeService
 
         //var queue = _cacheProvider.GetQueue<String>($"nodecmd:{node.Code}");
         //queue.Add(commandModel.ToJson());
-        _sessionManager.PublishAsync(node.Code, commandModel, null, default).ConfigureAwait(false).GetAwaiter().GetResult();
+        sessionManager.PublishAsync(node.Code, commandModel, null, default).ConfigureAwait(false).GetAwaiter().GetResult();
 
         // 挂起等待。借助redis队列,等待响应
         if (model.Timeout > 0)
         {
-            var q = _cacheProvider.GetQueue<CommandReplyModel>($"nodereply:{cmd.Id}");
+            var q = cacheProvider.GetQueue<CommandReplyModel>($"nodereply:{cmd.Id}");
             var reply = await q.TakeOneAsync(model.Timeout);
             if (reply != null)
             {
                 // 埋点
-                using var span = _tracer?.NewSpan($"mq:NodeCommandReply", reply);
+                using var span = tracer?.NewSpan($"mq:NodeCommandReply", reply);
 
                 if (reply.Status == CommandStatus.错误)
                     throw new Exception($"命令错误!{reply.Data}");