public IActionResult IndexAsync() { _scope.GetType(); var module = (ModuleDelegationType)ControllerContext.ActionDescriptor.Properties .FirstOrDefault(x => x.Key.ToString() == "Module").Value; return(Ok(module.ModuleDefinition)); }
/// <summary> /// 范围容器是否已被释放 /// </summary> /// <param name="lifetimeScope">范围容器</param> /// <returns>是否已被释放</returns> public static bool Disposed(this ILifetimeScope lifetimeScope) { #region # 验证 if (lifetimeScope == null) { return(true); } #endregion Type type = lifetimeScope.GetType(); const string disposedPropertyName = "IsDisposed"; PropertyInfo disposedProperty = type.GetProperty(disposedPropertyName, BindingFlags.NonPublic | BindingFlags.Instance); object value = disposedProperty.GetValue(lifetimeScope, null); bool disposed = (bool)value; return(disposed); }
/// <summary> /// 获取可释放对象列表 /// </summary> /// <param name="lifetimeScope">范围容器</param> /// <returns>可释放对象列表</returns> private static IList <IDisposable> GetDisposableInstances(ILifetimeScope lifetimeScope) { #region # 验证 if (lifetimeScope == null) { return(new List <IDisposable>()); } #endregion IList <IDisposable> disposables = new List <IDisposable>(); Type lifetimeScopeType = lifetimeScope.GetType(); const string disposerPropertyName = "Disposer"; const string disposableItemsFieldName = "_items"; PropertyInfo disposerProperty = lifetimeScopeType.GetProperty(disposerPropertyName, BindingFlags.Public | BindingFlags.Instance); object disposer = disposerProperty.GetValue(lifetimeScope, null); Type disposerType = disposer.GetType(); FieldInfo disposableItemsField = disposerType.GetField(disposableItemsFieldName, BindingFlags.NonPublic | BindingFlags.Instance); object disposableItems = disposableItemsField?.GetValue(disposer); if (disposableItems is Stack <IDisposable> stack) { foreach (IDisposable disposable in stack) { Type releaseActionType = disposable.GetType(); const string actionFieldName = "_action"; const string eventArgsFieldName = "e"; FieldInfo actionField = releaseActionType.GetField(actionFieldName, BindingFlags.NonPublic | BindingFlags.Instance); Action action = (Action)actionField.GetValue(disposable); Type targetType = action.Target.GetType(); FieldInfo eventArgsField = targetType.GetField(eventArgsFieldName, BindingFlags.Public | BindingFlags.Instance); ActivatingEventArgs <object> eventArgs = (ActivatingEventArgs <object>)eventArgsField.GetValue(action.Target); disposables.Add((IDisposable)eventArgs.Instance); } } return(disposables); }