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); } }
/// <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); }
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); }