/// <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])); }