fix
This commit is contained in:
parent
286a8c0d66
commit
0d8002bf65
@ -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<T>() 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<IServiceTickable>();
|
||||
_tickablesDirty = false;
|
||||
}
|
||||
|
||||
return _tickableSnapshot;
|
||||
}
|
||||
|
||||
@ -237,6 +261,7 @@ namespace AlicizaX
|
||||
_lateTickableSnapshot = _lateTickables.Count > 0 ? _lateTickables.ToArray() : Array.Empty<IServiceLateTickable>();
|
||||
_lateTickablesDirty = false;
|
||||
}
|
||||
|
||||
return _lateTickableSnapshot;
|
||||
}
|
||||
|
||||
@ -248,6 +273,7 @@ namespace AlicizaX
|
||||
_fixedTickableSnapshot = _fixedTickables.Count > 0 ? _fixedTickables.ToArray() : Array.Empty<IServiceFixedTickable>();
|
||||
_fixedTickablesDirty = false;
|
||||
}
|
||||
|
||||
return _fixedTickableSnapshot;
|
||||
}
|
||||
|
||||
@ -259,12 +285,13 @@ namespace AlicizaX
|
||||
_gizmoSnapshot = _gizmoDrawables.Count > 0 ? _gizmoDrawables.ToArray() : Array.Empty<IServiceGizmoDrawable>();
|
||||
_gizmoDrawablesDirty = false;
|
||||
}
|
||||
|
||||
return _gizmoSnapshot;
|
||||
}
|
||||
|
||||
private static int CompareByOrder<T>(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);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user