示例#1
0
        public static IEnumerable <ICommand> GetCommands(ICommand parent, IObjectProvider objectProvider, IEnumerable <IOption> inheritedOptions)
        {
            var commandObjects = objectProvider.Type.GetMembers(
                System.Reflection.BindingFlags.Public |
                System.Reflection.BindingFlags.NonPublic |
                System.Reflection.BindingFlags.Instance |
                System.Reflection.BindingFlags.Static)
                                 .Where(_ => _.MemberType == System.Reflection.MemberTypes.Property || _.MemberType == System.Reflection.MemberTypes.Field)
                                 .SelectMany(member => GetCommands(parent, objectProvider, member, inheritedOptions))
                                 .Where(_ => _ != null)
                                 .ToList();

            return(objectProvider.Type.GetMethods(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static)
                   .SelectMany(_ => MethodCommand.Create(parent, objectProvider, _, inheritedOptions).ToEnumerable())
                   .Concat(commandObjects)
                   .ToList());
        }
示例#2
0
        public static Maybe <ICommand> Create(ICommand parent, IObjectProvider containingObject, MethodInfo method, IEnumerable <IOption> inheritedOptions)
        {
            if (inheritedOptions == null)
            {
                throw new ArgumentNullException(nameof(inheritedOptions));
            }

            return(method
                   .GetUsage()
                   .Select(usage =>
            {
                var help = new HelpOption();
                var helpCommand = new ObjectCommandSource(null, ObjectProvider.Create(help));

                var c = new MethodCommand(parent, containingObject, method, helpCommand.Options.Concat(inheritedOptions));

                help.Command = c;
                return (ICommand)c;
            }));
        }