Skip to content

StartOptionValueParserRegistry

Lunar Doggo edited this page Apr 10, 2022 · 1 revision

What is it?

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.

Implementation

public static class StartOptionValueParserRegistry

Methods

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

Example

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)
    {
        ...
    }

    ...
}
Clone this wiki locally