mirror of
https://github.com/nsnail/spectre.console.git
synced 2025-06-20 13:48:16 +08:00
Add parameter value provider support
Adds support for parameter value providers which makes it possible to set custom values for parameters.
This commit is contained in:

committed by
Phil Scott

parent
d1d94cdebe
commit
1dd1945297
@ -13,9 +13,10 @@ namespace Spectre.Console.Cli
|
||||
public CommandArgument(
|
||||
Type parameterType, ParameterKind parameterKind, PropertyInfo property, string? description,
|
||||
TypeConverterAttribute? converter, DefaultValueAttribute? defaultValue,
|
||||
CommandArgumentAttribute argument, IEnumerable<ParameterValidationAttribute> validators)
|
||||
CommandArgumentAttribute argument, ParameterValueProviderAttribute? valueProvider,
|
||||
IEnumerable<ParameterValidationAttribute> validators)
|
||||
: base(parameterType, parameterKind, property, description, converter, defaultValue,
|
||||
null, validators, argument.IsRequired)
|
||||
null, valueProvider, validators, argument.IsRequired)
|
||||
{
|
||||
Value = argument.ValueName;
|
||||
Position = argument.Position;
|
||||
|
@ -182,6 +182,7 @@ namespace Spectre.Console.Cli
|
||||
var description = property.GetCustomAttribute<DescriptionAttribute>();
|
||||
var converter = property.GetCustomAttribute<TypeConverterAttribute>();
|
||||
var deconstructor = property.GetCustomAttribute<PairDeconstructorAttribute>();
|
||||
var valueProvider = property.GetCustomAttribute<ParameterValueProviderAttribute>();
|
||||
var validators = property.GetCustomAttributes<ParameterValidationAttribute>(true);
|
||||
var defaultValue = property.GetCustomAttribute<DefaultValueAttribute>();
|
||||
|
||||
@ -194,7 +195,8 @@ namespace Spectre.Console.Cli
|
||||
|
||||
return new CommandOption(property.PropertyType, kind,
|
||||
property, description?.Description, converter, deconstructor,
|
||||
attribute, validators, defaultValue, attribute.ValueIsOptional);
|
||||
attribute, valueProvider, validators, defaultValue,
|
||||
attribute.ValueIsOptional);
|
||||
}
|
||||
|
||||
private static CommandArgument BuildArgumentParameter(PropertyInfo property, CommandArgumentAttribute attribute)
|
||||
@ -202,6 +204,7 @@ namespace Spectre.Console.Cli
|
||||
var description = property.GetCustomAttribute<DescriptionAttribute>();
|
||||
var converter = property.GetCustomAttribute<TypeConverterAttribute>();
|
||||
var defaultValue = property.GetCustomAttribute<DefaultValueAttribute>();
|
||||
var valueProvider = property.GetCustomAttribute<ParameterValueProviderAttribute>();
|
||||
var validators = property.GetCustomAttributes<ParameterValidationAttribute>(true);
|
||||
|
||||
var kind = GetParameterKind(property.PropertyType);
|
||||
@ -209,7 +212,8 @@ namespace Spectre.Console.Cli
|
||||
return new CommandArgument(
|
||||
property.PropertyType, kind, property,
|
||||
description?.Description, converter,
|
||||
defaultValue, attribute, validators);
|
||||
defaultValue, attribute, valueProvider,
|
||||
validators);
|
||||
}
|
||||
|
||||
private static ParameterKind GetOptionKind(
|
||||
|
@ -16,10 +16,11 @@ namespace Spectre.Console.Cli
|
||||
public CommandOption(
|
||||
Type parameterType, ParameterKind parameterKind, PropertyInfo property, string? description,
|
||||
TypeConverterAttribute? converter, PairDeconstructorAttribute? deconstructor,
|
||||
CommandOptionAttribute optionAttribute, IEnumerable<ParameterValidationAttribute> validators,
|
||||
CommandOptionAttribute optionAttribute, ParameterValueProviderAttribute? valueProvider,
|
||||
IEnumerable<ParameterValidationAttribute> validators,
|
||||
DefaultValueAttribute? defaultValue, bool valueIsOptional)
|
||||
: base(parameterType, parameterKind, property, description, converter,
|
||||
defaultValue, deconstructor, validators, false)
|
||||
defaultValue, deconstructor, valueProvider, validators, false)
|
||||
{
|
||||
LongNames = optionAttribute.LongNames;
|
||||
ShortNames = optionAttribute.ShortNames;
|
||||
|
@ -17,6 +17,7 @@ namespace Spectre.Console.Cli
|
||||
public TypeConverterAttribute? Converter { get; }
|
||||
public PairDeconstructorAttribute? PairDeconstructor { get; }
|
||||
public List<ParameterValidationAttribute> Validators { get; }
|
||||
public ParameterValueProviderAttribute? ValueProvider { get; }
|
||||
public bool Required { get; set; }
|
||||
public string PropertyName => Property.Name;
|
||||
|
||||
@ -28,6 +29,7 @@ namespace Spectre.Console.Cli
|
||||
string? description, TypeConverterAttribute? converter,
|
||||
DefaultValueAttribute? defaultValue,
|
||||
PairDeconstructorAttribute? deconstuctor,
|
||||
ParameterValueProviderAttribute? valueProvider,
|
||||
IEnumerable<ParameterValidationAttribute> validators, bool required)
|
||||
{
|
||||
Id = Guid.NewGuid();
|
||||
@ -38,6 +40,7 @@ namespace Spectre.Console.Cli
|
||||
Converter = converter;
|
||||
DefaultValue = defaultValue;
|
||||
PairDeconstructor = deconstuctor;
|
||||
ValueProvider = valueProvider;
|
||||
Validators = new List<ParameterValidationAttribute>(validators ?? Array.Empty<ParameterValidationAttribute>());
|
||||
Required = required;
|
||||
}
|
||||
|
Reference in New Issue
Block a user