private void MapKeyedOptions( ICommandInitializationRequest request, IEnumerable <AttributeHelper.AttributeExtendedPropertyInfo <OptionAttribute> > options, TokenizedCommand tokenizedCommand, IDictionary <string, string> errors, ICollection <Exception> exceptions) { foreach (var option in options) { if (!tokenizedCommand.Arguments.Any(a => option.Attribute.NameEquals(a.Key, Settings.StringComparsion))) { continue; } if (!option.PropertyInfo.CanWrite) { errors.Add(option.Attribute.LongName, $"Невозможно установить свойство '{option.PropertyInfo.Name}' " + $"модели '{request.CommandType.Name}'"); continue; } try { option.PropertyInfo.SetValue(request.CommandInstance, true); } catch (Exception e) { exceptions.Add( new CommandParserException($"Исключение при установке свойства '{option.PropertyInfo.Name}'", e)); } } }
public CommandInitializationRequest( Type commandType, object commandInstance, TokenizedCommand tokenizedCommand, ICommandParseRequest parseRequest) { CommandType = commandType; CommandInstance = commandInstance; TokenizedCommand = tokenizedCommand; ParseRequest = parseRequest; }
public CommandTypeResolutionResult Resolve(MultipleCommandParseRequest request, TokenizedCommand command) { return(_sourceTypeResolver.Resolve(request, command)); }
/// <inheritdoc /> public CommandTypeResolutionResult Resolve(MultipleCommandParseRequest request, TokenizedCommand command) { if (request.ModelTypes == null || request.ModelTypes.Length == 0) { throw new ArgumentException("Не заданы типы команд", nameof(request.ModelTypes)); } var typesWithoutVerb = AttributeHelper.AllTypesWithoutAttribute <VerbAttribute>(request.ModelTypes) .Select(t => t.Name) .ToArray(); if (typesWithoutVerb.Length > 0) { return(CommandTypeResolutionResult.Failed( $"Для команд {string.Join(",", typesWithoutVerb)} не задан атрибут '{nameof(VerbAttribute)}'")); } var types = AttributeHelper.AllTypesWithAttribute <VerbAttribute>( request.ModelTypes, a => StringComparer.InvariantCulture.Equals(a.Verb, command.Verb)) .ToArray(); if (types.Length == 0) { return(CommandTypeResolutionResult.Failed( "Не найдена модель для сопоставления с командой. " + $"Проверьте наличие атрибута {nameof(VerbAttribute)} соответствующего команде '{command.Verb}'")); } if (types.Length > 1) { var possibleTypes = string.Join(",", types.Select(t => t.Name)); return(CommandTypeResolutionResult.Failed( $"Для команды '{command.Verb}' найдено несколько возможных моделей сопоставления: {possibleTypes}")); } return(CommandTypeResolutionResult.Resolved(types[0])); }