-
Notifications
You must be signed in to change notification settings - Fork 0
StartOptionValueParserRegistry
Lunar Doggo edited this page Apr 10, 2022
·
1 revision
You can use the StartOptionValueParserRegistry
to register custom implementations of IStartOptionValueParser for your application. This attribute only is useful if you use the command-based approach in combination with a CommandApplication.
public static class StartOptionValueParserRegistry
Sitnature | Description |
---|---|
public static void Register(IStartOptionValueParser parser) |
Registers a new IStartOptionValueParser
|
public static void Deregister(IStartOptionValueParser parser) |
Deregisters a IStartOptionValueParser
|
public static void Deregister<T>() |
Deregisters the IStartOptionValueParser of the given type T
|
public static IStartOptionValueParser GetParser(Type key) |
Returns the IStartOptionValueParser of the given type |
public static IStartOptionValueParser GetParser<T>() |
Returns the IStartOptionValueParser of the given type T
|
Steps:
- Implement your custom
IStartOptionValueParser
- Register it before starting the parsing process
- Use it in a StartOptionAttribute
public class CalculationOperationValueParser : IStartOptionValueParser
{
public object ParseValue(string value)
{
if (Int32.TryParse(value, out int result))
{
return (CalculationOperation)result;
}
return Enum.GetValues(typeof(CalculationOperation)).Cast<CalculationOperation>().Single(_value => _value.ToString().Equals(value));
}
public object[] ParseValues(string[] values)
{
return values.Select(_value => this.ParseValue(_value)).ToArray();
}
}
...
static void Main(string[] args)
{
StartOptionValueParserRegistry.Register(new CalculationOperationValueParser());
DemoApplication application = new DemoApplication();
application.Run(args);
}
...
public class BasicMockCommand : IApplicationCommand
{
[StartOptionGroup("calculate", "c", Description = "Executes a calculation")]
public BasicMockCommand(..., [StartOption("operation", "o", Description = "Operation to execute", Mandatory = true, ValueType = StartOptionValueType.Single, ParserType = typeof(CalculationOperationValueParser))] CalculationOperation operation)
{
...
}
...
}