Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
        /// <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);
                }
            }
        }