Exemple #1
0
        public static object[] MakeArguments(MethodBase method, IReadOnlyList <object> source, CancellationToken token)
        {
            // late-bound provide the CancellationToken
            var parameters = method.CachedParameters();
            var target     = new object[parameters.Count];

            for (int index = 0; index < parameters.Count; ++index)
            {
                var  type   = parameters[index].ParameterType;
                bool cancel = type.IsAssignableFrom(typeof(CancellationToken));
                if (cancel)
                {
                    var resolved = (CancellationToken)source[index];
                    if (resolved.CanBeCanceled)
                    {
                        // consider CancellationTokenSource.CreateLinkedTokenSource
                        // but remember to CancellationTokenSource.Dispose
                        throw new NotSupportedException();
                    }

                    target[index] = token;
                }
                else
                {
                    target[index] = source[index];
                }
            }

            return(target);
        }
Exemple #2
0
        public static bool TryResolveArguments(IResolver resolver, MethodBase method, out object[] arguments)
        {
            var parameters = method.CachedParameters();

            if (parameters.Count == 0)
            {
                arguments = Array.Empty <object>();
                return(true);
            }

            arguments = null;
            for (int index = 0; index < parameters.Count; ++index)
            {
                var parameter = parameters[index];

                object argument;

                if (!TryResolveArgument(resolver, parameter, out argument))
                {
                    arguments = null;
                    return(false);
                }

                if (arguments == null)
                {
                    arguments = new object[parameters.Count];
                }

                arguments[index] = argument;
            }

            return(arguments != null);
        }