示例#1
0
        public IActionResult IndexAsync()
        {
            _scope.GetType();

            var module =
                (ModuleDelegationType)ControllerContext.ActionDescriptor.Properties
                .FirstOrDefault(x => x.Key.ToString() == "Module").Value;

            return(Ok(module.ModuleDefinition));
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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);
        }