private void RegisterNonGenericCommandInternal <TCommand>(CommandLineCommand <TOption, object> command)
            where TCommand : Command
        {
            var cmdConfigurator = ActivatorUtilities.GetServiceOrCreateInstance <TCommand>(Services);

            cmdConfigurator.OnConfigure(command);

            command.OnExecuting(cmdConfigurator.OnExecute);
            command.OnExecutingAsync(cmdConfigurator.OnExecuteAsync);
        }
        private void RegisterGenericCommandInternal <TCommand>(CommandLineCommand <TOption, object> command)
            where TCommand : Command
        {
            var cmdConfigurator = (Command <TOption>)(Command)(ActivatorUtilities.GetServiceOrCreateInstance <TCommand>(Services));

            cmdConfigurator.OnConfigure(command);

            command.OnExecuting((Action <TOption>)cmdConfigurator.OnExecute);
            command.OnExecutingAsync((Func <TOption, CancellationToken, Task>)cmdConfigurator.OnExecuteAsync);
        }
        /// <summary>
        /// Registers a command type
        /// </summary>
        /// <typeparam name="TCommand">Command type, must be inherit <see cref="Command{TOptions}"/></typeparam>
        public void RegisterCommand <TCommand>()
            where TCommand : Command <TOption>
        {
            var cmdConfigurator = ContainerResolver.Resolve <TCommand>();

            var command = new CommandLineCommand <TOption, object>(ParserOptions, ArgumentResolverFactory, ContainerResolver, m_option);

            cmdConfigurator.OnConfigure(command);

            command.OnExecuting((Action <TOption>)cmdConfigurator.OnExecute);

            m_commands.Add(command);
        }
        /// <summary>
        /// Registers a command type
        /// </summary>
        /// <typeparam name="TCommand">Command type, must be inherit <see cref="Command{TOptions,TCommandOption}"/></typeparam>
        /// <typeparam name="TCommandOption">The command options</typeparam>
        public void RegisterCommand <TCommand, TCommandOption>()
            where TCommand : Command <TOption, TCommandOption>
            where TCommandOption : class, new()
        {
            var cmdConfigurator = ContainerResolver.Resolve <TCommand>();

            var command = new CommandLineCommand <TOption, TCommandOption>(ParserOptions, ArgumentResolverFactory, ContainerResolver, m_option);

            cmdConfigurator.OnConfigure((ICommandConfigurationBuilder <TCommandOption>)command);

            command.OnExecuting((Action <TOption, TCommandOption>)cmdConfigurator.OnExecute);

            m_commands.Add(command);
        }