public static void ConfigureFromMethod( this Command command, MethodInfo method) { if (command == null) { throw new ArgumentNullException(nameof(command)); } if (method == null) { throw new ArgumentNullException(nameof(method)); } foreach (var option in method.BuildOptions()) { command.AddOption(option); } if (method.GetParameters() .FirstOrDefault(p => _argumentParameterNames.Contains(p.Name)) is ParameterInfo argsParam) { command.Argument = new Argument { ArgumentType = argsParam.ParameterType, Name = argsParam.Name }; } command.Handler = CommandHandler.Create(method); }
public static void ConfigureFromMethod( this Command command, MethodInfo method, object target = null ) { if (command == null) { throw new ArgumentNullException(nameof(command)); } if (method == null) { throw new ArgumentNullException(nameof(method)); } foreach (var option in method.BuildOptions()) { command.AddOption(option); } if ( method.GetParameters().FirstOrDefault(p => _argumentParameterNames.Contains(p.Name)) is ParameterInfo argsParam ) { var argument = new Argument { ArgumentType = argsParam.ParameterType, Name = argsParam.Name }; if (argsParam.HasDefaultValue) { if (argsParam.DefaultValue != null) { argument.SetDefaultValue(argsParam.DefaultValue); } else { argument.SetDefaultValueFactory(() => null); } } command.AddArgument(argument); } command.Handler = CommandHandler.Create(method, target); }
public static void ConfigureFromMethod( this Command command, MethodInfo method, object target = null) { if (command == null) { throw new ArgumentNullException(nameof(command)); } if (method == null) { throw new ArgumentNullException(nameof(method)); } foreach (var option in method.BuildOptions()) { command.AddOption(option); } if (method.GetParameters() .FirstOrDefault(p => _argumentParameterNames.Contains(p.Name)) is ParameterInfo argsParam) { var argument = new Argument { ArgumentType = argsParam.ParameterType, Name = argsParam.Name }; if (argsParam.HasDefaultValue) { if (argsParam.DefaultValue != null) { argument.SetDefaultValue(argsParam.DefaultValue); } else { argument.SetDefaultValueFactory(() => null); } } command.AddArgument(argument); } if (XmlDocReader.TryLoad(GetDefaultXmlDocsFileLocation(method.DeclaringType.Assembly), out var xmlDocs)) { if (xmlDocs.TryGetMethodDescription(method, out CommandHelpMetadata metadata) && metadata.Description != null) { command.Description = metadata.Description; var options = command.Options.ToArray(); foreach (var parameterDescription in metadata.ParameterDescriptions) { var kebabCasedParameterName = parameterDescription.Key.ToKebabCase(); var option = options.FirstOrDefault(o => o.HasAlias(kebabCasedParameterName)); if (option != null) { option.Description = parameterDescription.Value; } else { foreach (var argument in command.Arguments) { if (string.Equals( argument.Name, kebabCasedParameterName, StringComparison.OrdinalIgnoreCase)) { argument.Description = parameterDescription.Value; } } } } metadata.Name = method.DeclaringType.Assembly.GetName().Name; } } command.Handler = CommandHandler.Create(method, target); }