Exemple #1
0
        public object ExecuteAsync(string controllerName, string actionName, IOwinContext context)
        {
            var controllerType = ApplicationAssemblyLoader.FindControllerTypeByName(controllerName);

            if (controllerType == null)
            {
                throw new NullReferenceException("Not Found Controller Name by" + controllerName);
            }

            var controller = (Controller)Activator.CreateInstance(controllerType);
            var pi         = controllerType.GetTypeInfo().GetProperty("Context", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);

            pi.SetValue(controller, context);
            var actionMethodInfo = controllerType.GetTypeInfo().GetMethod(actionName);

            if (actionMethodInfo == null)
            {
                throw new NullReferenceException("Not Found Action Name by" + actionName);
            }

            IDynamicMethodInvoker invoker = null;

            if (!actionInvokerCache.TryGetValue(actionMethodInfo, out invoker))
            {
                invoker = new DynamicMethodInvoker(actionMethodInfo);
                actionInvokerCache.TryAdd(actionMethodInfo, invoker);
            }

            var parameterInfoList = actionMethodInfo.GetParameters();

            var actionParams = parameterInfoList.ToActionParameters();

            var paramValues = ActionRuntimeParameter.GetValuesByRequest(actionParams, context.Request);

            var    filter = actionMethodInfo.GetCustomAttribute(typeof(ActionFilterAttribute), true) as ActionFilterAttribute;
            object result = null;

            if (filter != null)
            {
                ActionExecuteContext executeContext = new ActionExecuteContext(context, controllerName, actionName, invoker, parameterInfoList);

                if (filter.OnActionExecuting(executeContext))
                {
                    executeContext.Result = invoker.Invoke(controller, paramValues.ToArray());
                }

                filter.OnActionExecuted(executeContext);
                result = executeContext.Result;
            }
            else
            {
                result = invoker.Invoke(controller, paramValues.ToArray());
            }

            return(result);
        }
 protected void Buttons_Command(object sender, CommandEventArgs e)
 {
     if (e.CommandArgument.ToString().Equals("DoResetPassword"))
     {
         DoResetPassword();
     }
     else if (e.CommandArgument.ToString().Equals("CancelResetPassword"))
     {
         CancelResetPassword();
     }
     else
     {
         DynamicMethodInvoker.InvokeBasicCommand(e.CommandArgument.ToString(), this);
     }
 }
Exemple #3
0
        /// <summary>
        /// 返回动态对象的实例委托,可以调用私有对象
        /// </summary>
        /// <param name="moudle">程序集模块</param>
        /// <param name="typeFullName">完成类型名</param>
        /// <param name="isPublic">是否公有</param>
        /// <param name="paramters">参数</param>
        /// <returns>对象的实例</returns>
        public static object InternalCreator(Module moudle, string typeFullName, bool isPublic, params object[] paramters)
        {
            string methodStr = "System.Object CreateInstance(System.String, Boolean, System.Reflection.BindingFlags, "
                               + "System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo, System.Object[])";

            foreach (MethodInfo methodInfo in typeof(Assembly).GetMethods())
            {
                if (methodInfo.ToString() == methodStr)
                {
                    DynamicMethodInvoker invoker = GetMethodInvoker(methodInfo);
                    return(invoker(moudle.Assembly, typeFullName, false, BindingFlags.Instance |
                                   (isPublic ? BindingFlags.Public : BindingFlags.NonPublic), null, null, null, null));
                }
            }

            return(null);
        }
 public void InvokePostSaveOperation(dynamic id, NameValueCollection formCollection, dynamic model, ref string returnUrl, IDictionary <string, object> tempData, IDictionary <string, object> viewData)
 {
     DynamicMethodInvoker.InvokePostSaveOperation(InvokeMethodFunction, id, formCollection, model, ref returnUrl, tempData, viewData);
 }
Exemple #5
0
 protected void Buttons_Command(object sender, CommandEventArgs e)
 {
     DynamicMethodInvoker.InvokeBasicCommand(e.CommandArgument.ToString(), this);
 }
        public object ExecuteAsync(string controllerName, string actionName, IOwinContext context)
        {
            var serviceProvider = Application.CurrentApplication.ServiceProvider;

            var controllerType = ApplicationAssemblyLoader.FindControllerTypeByName(controllerName);

            if (controllerType == null)
            {
                throw new NullReferenceException("Not Found Controller Name by" + controllerName);
            }

            var controllerFactory = (IControllerFacotry)serviceProvider.
                                    GetService(typeof(IControllerFacotry));


            var controller = controllerFactory.CreateController(controllerType, serviceProvider);

            controller.SetHttpContext(context);

            var actionMethodInfo = controllerType.GetTypeInfo().GetMethod(actionName);

            if (actionMethodInfo == null)
            {
                throw new NullReferenceException("Not Found Action Name by" + actionName);
            }

            IDynamicMethodInvoker invoker = null;

            if (!actionInvokerCache.TryGetValue(actionMethodInfo, out invoker))
            {
                invoker = new DynamicMethodInvoker(actionMethodInfo);
                actionInvokerCache.TryAdd(actionMethodInfo, invoker);
            }

            var parameterInfoList = actionMethodInfo.GetParameters();

            var actionParams = parameterInfoList.ToActionParameters();

            var paramValues = ActionRuntimeParameter.GetValuesByRequest(actionParams, context.Request);

            var    filter = actionMethodInfo.GetCustomAttribute(typeof(ActionFilterAttribute), true) as ActionFilterAttribute;
            object result = null;

            if (filter != null)
            {
                ActionExecuteContext executeContext = new ActionExecuteContext(context, controllerName, actionName, invoker, parameterInfoList);

                if (filter.OnActionExecuting(executeContext))
                {
                    executeContext.Result = invoker.Invoke(controller, paramValues.ToArray());
                }

                filter.OnActionExecuted(executeContext);
                result = executeContext.Result;
            }
            else
            {
                result = invoker.Invoke(controller, paramValues.ToArray());
            }

            return(result);
        }