From 0d8002bf6572fb3f4eae3275acf5ff7f0d670a4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=80=9D=E6=B5=B7?= <1464576565@qq.com> Date: Tue, 7 Apr 2026 15:16:34 +0800 Subject: [PATCH] fix --- .../ABase/Base/Service/Core/ServiceScope.cs | 47 +++++++++++++++---- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/Runtime/ABase/Base/Service/Core/ServiceScope.cs b/Runtime/ABase/Base/Service/Core/ServiceScope.cs index c13878a..f929c23 100644 --- a/Runtime/ABase/Base/Service/Core/ServiceScope.cs +++ b/Runtime/ABase/Base/Service/Core/ServiceScope.cs @@ -107,6 +107,7 @@ namespace AlicizaX service = raw as T; return service != null; } + service = null; return false; } @@ -114,7 +115,8 @@ namespace AlicizaX public T Require() where T : class, IService { if (TryGet(out T service)) return service; - throw new InvalidOperationException($"Scope {Name} does not contain service {typeof(T).FullName}."); + Log.Error($"Scope {Name} does not contain service {typeof(T).FullName}."); + return default; } public bool HasContract(Type contractType) @@ -182,18 +184,37 @@ namespace AlicizaX private void AddToLifecycleLists(IService service) { - if (service is IServiceTickable tickable) { _tickables.Add(tickable); _tickablesDirty = true; } - if (service is IServiceLateTickable late) { _lateTickables.Add(late); _lateTickablesDirty = true; } - if (service is IServiceFixedTickable fixed_) { _fixedTickables.Add(fixed_); _fixedTickablesDirty = true; } - if (service is IServiceGizmoDrawable gizmo) { _gizmoDrawables.Add(gizmo); _gizmoDrawablesDirty = true; } + if (service is IServiceTickable tickable) + { + _tickables.Add(tickable); + _tickablesDirty = true; + } + + if (service is IServiceLateTickable late) + { + _lateTickables.Add(late); + _lateTickablesDirty = true; + } + + if (service is IServiceFixedTickable fixed_) + { + _fixedTickables.Add(fixed_); + _fixedTickablesDirty = true; + } + + if (service is IServiceGizmoDrawable gizmo) + { + _gizmoDrawables.Add(gizmo); + _gizmoDrawablesDirty = true; + } } private void RemoveFromLifecycleLists(IService service) { - if (service is IServiceTickable tickable && _tickables.Remove(tickable)) _tickablesDirty = true; - if (service is IServiceLateTickable late && _lateTickables.Remove(late)) _lateTickablesDirty = true; - if (service is IServiceFixedTickable fixed_ && _fixedTickables.Remove(fixed_)) _fixedTickablesDirty = true; - if (service is IServiceGizmoDrawable gizmo && _gizmoDrawables.Remove(gizmo)) _gizmoDrawablesDirty = true; + if (service is IServiceTickable tickable && _tickables.Remove(tickable)) _tickablesDirty = true; + if (service is IServiceLateTickable late && _lateTickables.Remove(late)) _lateTickablesDirty = true; + if (service is IServiceFixedTickable fixed_ && _fixedTickables.Remove(fixed_)) _fixedTickablesDirty = true; + if (service is IServiceGizmoDrawable gizmo && _gizmoDrawables.Remove(gizmo)) _gizmoDrawablesDirty = true; } private void RemoveBindings(IService service) @@ -203,6 +224,7 @@ namespace AlicizaX for (var i = 0; i < contracts.Count; i++) _servicesByContract.Remove(contracts[i]); } + _contractsByService.Remove(service); _registrationOrder.Remove(service); } @@ -215,6 +237,7 @@ namespace AlicizaX for (var i = 0; i < contracts.Count; i++) _servicesByContract.Remove(contracts[i]); } + _contractsByService.Remove(service); } @@ -226,6 +249,7 @@ namespace AlicizaX _tickableSnapshot = _tickables.Count > 0 ? _tickables.ToArray() : Array.Empty(); _tickablesDirty = false; } + return _tickableSnapshot; } @@ -237,6 +261,7 @@ namespace AlicizaX _lateTickableSnapshot = _lateTickables.Count > 0 ? _lateTickables.ToArray() : Array.Empty(); _lateTickablesDirty = false; } + return _lateTickableSnapshot; } @@ -248,6 +273,7 @@ namespace AlicizaX _fixedTickableSnapshot = _fixedTickables.Count > 0 ? _fixedTickables.ToArray() : Array.Empty(); _fixedTickablesDirty = false; } + return _fixedTickableSnapshot; } @@ -259,12 +285,13 @@ namespace AlicizaX _gizmoSnapshot = _gizmoDrawables.Count > 0 ? _gizmoDrawables.ToArray() : Array.Empty(); _gizmoDrawablesDirty = false; } + return _gizmoSnapshot; } private static int CompareByOrder(T a, T b) { - var left = a is IServiceOrder oa ? oa.Order : 0; + var left = a is IServiceOrder oa ? oa.Order : 0; var right = b is IServiceOrder ob ? ob.Order : 0; return left.CompareTo(right); }