public ActionResult Execute(string workflowKey, string activityKey, Type modelType, string methodName, int index) { var activity = GetActivityFor(workflowKey, activityKey); if (activity == null) { throw new Exception("Workflow does not contains a start activity."); } var activityMethod = activity.Method; var type = activityMethod.DeclaringType; var mapping = GetMappingFor(type, activityMethod, methodName, index); if (mapping == null) { throw new RunningObjectsException(string.Format("No method found with name {1} for type {0}", type.PartialName(), activityMethod.Name)); } var bindingContext = MethodBinder.CreateBindingContext(ControllerContext); ((ValueProviderCollection)bindingContext.ValueProvider).Add(new WorkflowBindingParameterValueProvider()); var method = Binders[typeof(Method)].BindModel(ControllerContext, bindingContext) as Method; if (method != null) { if (!method.Parameters.Any() || method.Descriptor.Attributes.OfType <AutoInvokeAttribute>().Any()) { return(ExecuteMethodOf ( modelType, method, OnSuccess(activity, null), OnSuccessWithReturn(activity), OnException(method), HttpNotFound )); } } return(!ControllerContext.IsChildAction ? (ActionResult)View("Execute", method) : PartialView("Execute", method)); }
public ActionResult Execute(Type modelType, string methodName, int index, string key = null) { var typeMapping = ModelMappingManager.MappingFor(modelType); var methods = key != null ? typeMapping.InstanceMethods : typeMapping.StaticMethods; var mapping = methods.FirstOrDefault(m => m.MethodName.Equals(methodName, StringComparison.InvariantCultureIgnoreCase) && m.Index == index); if (mapping == null) { throw new RunningObjectsException(string.Format("No method found with name {2} at index {0} for type {1}", index, modelType.PartialName(), methodName)); } var method = Binders[typeof(Method)].BindModel(ControllerContext, MethodBinder.CreateBindingContext(ControllerContext)) as Method; if (method != null) { if (!method.Parameters.Any() || method.Descriptor.Attributes.OfType <AutoInvokeAttribute>().Any()) { return(ExecuteMethodOf ( modelType, method, () => OnSuccess(modelType)(null), OnSuccessWithReturn(method), OnException(method), HttpNotFound, key )); } if (!method.Descriptor.Mapping.Method.IsStatic) { method.Instance = GetInstanceOf(modelType, key, new ModelDescriptor(typeMapping)); RunningObjectsSetup.Configuration.Query.RemoveKeywordEvaluator("{instance}"); RunningObjectsSetup.Configuration.Query.KeywordEvaluators.Add("{instance}", q => method.Instance); } } return(!IsChildAction ? (ActionResult)View(method) : PartialView(method)); }