/// <inheritdoc /> public virtual ICommandParseResult <object> ParseCommands(MultipleCommandParseRequest request) { try { var untypedCommandCreator = TokenizerProvider(); if (untypedCommandCreator == null) { throw new CommandParserException($"Не удалось получить парсер команд для запроса {request}"); } var tokenizeResult = untypedCommandCreator.Tokenize(request); if (!tokenizeResult.IsSucceed) { return(new UnparsedCommand <object>( new CommandParseError(tokenizeResult.ErrorsText, tokenizeResult.ErrorCode))); } var typeResolver = TypeResolverProvider(); if (typeResolver == null) { throw new CommandParserException($"Не удалось получить резолвер типа модели для запроса {request}"); } var typeResolution = typeResolver.Resolve(request, tokenizeResult.Command); if (!typeResolution.IsSucceed) { return(new UnparsedCommand <object>( new CommandParseError(typeResolution.ErrorsText, typeResolution.ErrorCode))); } var instance = Activator.CreateInstance(typeResolution.CommandType); var initializationRequest = new CommandInitializationRequest( typeResolution.CommandType, instance, tokenizeResult.Command, request); var initializer = InitializerProvider(); var initializationResult = initializer.Initialize(initializationRequest); if (!initializationResult.IsSucceed) { return(new UnparsedCommand <object>( new CommandParseError(initializationResult.ErrorsText, initializationResult.ErrorCode))); } return(new ParsedCommand <object>(initializationResult.InitializedCommand)); } catch (CommandParserException) { throw; } catch (Exception e) { throw new CommandParserException($"Не удалось выполнить разбор команды для запроса {request}", e); } }
/// <inheritdoc /> public virtual ICommandParseResult <TModel> ParseCommand <TModel>(SingleCommandParseRequest <TModel> request) where TModel : class, new() { try { var untypedCommandCreator = TokenizerProvider(); if (untypedCommandCreator == null) { throw new CommandParserException($"Не удалось получить парсер команд для запроса {request}"); } var tokenizeResult = untypedCommandCreator.Tokenize(request); if (!tokenizeResult.IsSucceed) { return(new UnparsedCommand <TModel>( new CommandParseError(tokenizeResult.ErrorsText, tokenizeResult.ErrorCode))); } var initializationRequest = new CommandInitializationRequest( typeof(TModel), new TModel(), tokenizeResult.Command, request); var initializer = InitializerProvider(); var initializationResult = initializer.Initialize(initializationRequest); if (!initializationResult.IsSucceed) { return(new UnparsedCommand <TModel>( new CommandParseError(initializationResult.ErrorsText, initializationResult.ErrorCode))); } return(new ParsedCommand <TModel>((TModel)initializationResult.InitializedCommand)); } catch (CommandParserException) { throw; } catch (Exception e) { throw new CommandParserException($"Не удалось выполнить разбор команды для запроса {request}", e); } }