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