private void BindParameters(ICommand instance, IReadOnlyList <CommandParameterInput> parameterInputs) { // All inputs must be bound var remainingParameterInputs = parameterInputs.ToList(); // Scalar parameters var scalarParameters = Parameters .OrderBy(p => p.Order) .TakeWhile(p => p.IsScalar) .ToArray(); for (var i = 0; i < scalarParameters.Length; i++) { var parameter = scalarParameters[i]; var scalarInput = i < parameterInputs.Count ? parameterInputs[i] : throw CliFxException.ParameterNotSet(parameter); parameter.BindOn(instance, scalarInput.Value); remainingParameterInputs.Remove(scalarInput); } // Non-scalar parameter (only one is allowed) var nonScalarParameter = Parameters .OrderBy(p => p.Order) .FirstOrDefault(p => !p.IsScalar); if (nonScalarParameter != null) { var nonScalarValues = parameterInputs .Skip(scalarParameters.Length) .Select(p => p.Value) .ToArray(); // Parameters are required by default and so a non-scalar parameter must // be bound to at least one value if (!nonScalarValues.Any()) { throw CliFxException.ParameterNotSet(nonScalarParameter); } nonScalarParameter.BindOn(instance, nonScalarValues); remainingParameterInputs.Clear(); } // Ensure all inputs were bound if (remainingParameterInputs.Any()) { throw CliFxException.UnrecognizedParametersProvided(remainingParameterInputs); } }
private void InjectParameters(ICommand command, IReadOnlyList <CommandUnboundArgumentInput> parameterInputs) { // All inputs must be bound var remainingParameterInputs = parameterInputs.ToList(); // Scalar parameters var scalarParameters = Parameters .OrderBy(p => p.Order) .TakeWhile(p => p.IsScalar) .ToArray(); for (var i = 0; i < scalarParameters.Length; i++) { var scalarParameter = scalarParameters[i]; var scalarParameterInput = i < parameterInputs.Count ? parameterInputs[i] : throw CliFxException.ParameterNotSet(scalarParameter); scalarParameter.Inject(command, scalarParameterInput.Value); remainingParameterInputs.Remove(scalarParameterInput); } // Non-scalar parameter (only one is allowed) var nonScalarParameter = Parameters .OrderBy(p => p.Order) .FirstOrDefault(p => !p.IsScalar); if (nonScalarParameter != null) { var nonScalarParameterValues = parameterInputs.Skip(scalarParameters.Length).Select(i => i.Value).ToArray(); nonScalarParameter.Inject(command, nonScalarParameterValues); remainingParameterInputs.Clear(); } // Ensure all inputs were bound if (remainingParameterInputs.Any()) { throw CliFxException.UnrecognizedParametersProvided(remainingParameterInputs); } }