private void Register(Delegate function, bool createAction)
        {
            var functionName = function.Method.Name;
            var returnType   = function.Method.ReturnType;

            var skip       = 0;
            var parameters = function.Method.GetParameters();

            if (parameters.Length > 0 && parameters[0].ParameterType == typeof(QueryParameters))
            {
                skip = 1;
            }

            var arguments = parameters.Skip(skip).ToDictionary(i => i.Name, i => i.ParameterType);

            DelegateODataFunction handler = (queryParameters, objects) =>
            {
                var args = new List <object>();
                if (skip == 1)
                {
                    args.Add(queryParameters);
                }

                return(function.DynamicInvoke(args.Concat(objects.Values).ToArray()));
            };

            if (createAction)
            {
                Register(new Action(functionName, handler, returnType, arguments));
            }
            else
            {
                Register(new Function(functionName, handler, returnType, arguments));
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Function"/> class.
        /// </summary>
        /// <param name="functionName">The name of the function.</param>
        /// <param name="handler">The handler for the function.</param>
        /// <param name="returnType">The return type of the function.</param>
        /// <param name="parametersTypes">The arguments of the function.</param>
        public Function(string functionName, DelegateODataFunction handler, Type returnType, Dictionary <string, Type> parametersTypes = null)
        {
            Contract.Requires <ArgumentNullException>(functionName != null);
            Contract.Requires <ArgumentException>(functionName != string.Empty);
            Contract.Requires <ArgumentNullException>(handler != null);
            Contract.Requires <ArgumentNullException>(returnType != null);

            Name       = functionName;
            Handler    = handler;
            ReturnType = returnType;

            if (parametersTypes == null)
            {
                parametersTypes = new Dictionary <string, Type>();
            }

            ParametersTypes = parametersTypes;
        }
Exemplo n.º 3
0
 /// <inheritdoc />
 public Action(string actionName, DelegateODataFunction handler, Dictionary <string, Type> parametersTypes = null)
     : this(actionName, handler, typeof(void), parametersTypes)
 {
 }
Exemplo n.º 4
0
 /// <inheritdoc />
 public Action(string actionName, DelegateODataFunction handler, Type returnType, Dictionary <string, Type> parametersTypes = null)
     : base(actionName, handler, returnType, parametersTypes)
 {
 }