public static object[] BindParameters(MethodInfo method, CommandLineApplication command) { var methodParams = method.GetParameters(); var arguments = new object[methodParams.Length]; for (var i = 0; i < methodParams.Length; i++) { var methodParam = methodParams[i]; if (typeof(CommandLineApplication).GetTypeInfo().IsAssignableFrom(methodParam.ParameterType)) { arguments[i] = command; } else if (typeof(IConsole).GetTypeInfo().IsAssignableFrom(methodParam.ParameterType)) { arguments[i] = command._context.Console; } else if (typeof(ValidationResult).GetTypeInfo().IsAssignableFrom(methodParam.ParameterType)) { arguments[i] = command.GetValidationResult(); } else if (typeof(CommandLineContext).GetTypeInfo().IsAssignableFrom(methodParam.ParameterType)) { arguments[i] = command._context; } else { throw new InvalidOperationException(Strings.UnsupportedParameterTypeOnMethod(method.Name, methodParam)); } } return(arguments); }
public ParseResult Process() { var parseResult = new ParseResult(); _currentCommand = _initialCommand; _currentCommandArguments = null; while (_enumerator.MoveNext()) { if (!ProcessNext()) { goto finished; } } _enumerator.Reset(); finished: parseResult.SelectedCommand = _currentCommand; parseResult.ValidationResult = _currentCommand.GetValidationResult(); return(parseResult); }
public static object[] BindParameters(MethodInfo method, CommandLineApplication command, CancellationToken cancellationToken) { var methodParams = method.GetParameters(); var arguments = new object[methodParams.Length]; for (var i = 0; i < methodParams.Length; i++) { var methodParam = methodParams[i]; if (typeof(CommandLineApplication).IsAssignableFrom(methodParam.ParameterType)) { arguments[i] = command; } else if (typeof(IConsole).IsAssignableFrom(methodParam.ParameterType)) { arguments[i] = command._context.Console; } else if (typeof(ValidationResult).IsAssignableFrom(methodParam.ParameterType)) { arguments[i] = command.GetValidationResult(); } else if (typeof(CommandLineContext).IsAssignableFrom(methodParam.ParameterType)) { arguments[i] = command._context; } else if (typeof(CancellationToken) == methodParam.ParameterType && cancellationToken != CancellationToken.None) { arguments[i] = cancellationToken; } else { var service = command.AdditionalServices?.GetService(methodParam.ParameterType); arguments[i] = service ?? throw new InvalidOperationException(Strings.UnsupportedParameterTypeOnMethod(method.Name, methodParam)); } } return(arguments); }