public virtual void Execute(IDictionary <string, object> context) { var delegParams = TargetDelegate.Method.GetParameters(); if (delegParams.Length != Arguments.Count) { throw new TargetParameterCountException( String.Format("Delegate {0} requires {1} parameter(s)", TargetDelegate.GetType(), delegParams.Length)); } var argValues = new object[Arguments.Count]; var i = 0; foreach (var argFunc in Arguments) { var argValue = argFunc(context); argValues[i] = ConvertManager.ChangeType(argValue, delegParams[i].ParameterType); i++; } var invokeResult = TargetDelegate.DynamicInvoke(argValues); if (ResultKey != null) { context[ResultKey] = invokeResult; } }
/// <summary> /// Calls the original function, and returns a return value. /// </summary> /// <param name="args"> /// The arguments to pass. If it is a 'void' argument list, /// you MUST pass 'null'. /// </param> /// <returns>An object containing the original functions return value.</returns> public object CallOriginal(params object[] args) { Disable(); var ret = TargetDelegate.DynamicInvoke(args); Enable(); return(ret); }
public List <EventResponse> FireEvent(String EventName, Event Event) { List <EventResponse> ResponseList = new List <EventResponse>(); Type LocalType = this.GetType(); Type TargetType = null; if ((TargetType = this.FindEventType(LocalType, EventName)) == null) { return(ResponseList); } else { FieldInfo TargetField = TargetType.GetField(EventName, BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); MulticastDelegate EventDelegates = (MulticastDelegate)TargetField.GetValue(this); if (EventDelegates == null) { return(ResponseList); } else { foreach (Delegate TargetDelegate in EventDelegates.GetInvocationList()) { try { Object DelegateResponse = TargetDelegate.DynamicInvoke(new Object[] { Event }); EventResponse Response = (EventResponse)DelegateResponse; ResponseList.Add(Response); } catch (Exception e) { } } return(ResponseList); } } }