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()); }
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; })); }