Example #1
0
        private static MethodInfo RandomMethod(ITaskProvider taskProvider)
        {
            var weight  = RandomUtility.Next(100) + 1;
            var methods = taskProvider.GetType().GetMethods();

            return(methods.RandomOrDefault((item) => Predicate(item)));

            bool Predicate(MethodInfo methodInfo)
            {
                if (methodInfo.IsStatic == true)
                {
                    return(false);
                }

                if (methodInfo.ReturnType != typeof(void))
                {
                    return(false);
                }

                var attr = methodInfo.GetCustomAttribute <TaskMethodAttribute>();

                if (attr == null)
                {
                    return(false);
                }

                if (attr.Weight < weight)
                {
                    return(false);
                }

                var parameters = methodInfo.GetParameters();

                if (parameters.Count() != 2)
                {
                    return(false);
                }

                return(parameters[1].ParameterType == typeof(TaskContext));
            }
        }