public Action ParseArguments(string[] arguments) { if (arguments.Length == 0) { throw new EmptyArgumentsException($"{UserMessages.EmptyArguments} {UserMessages.SpecifyArguments}"); } if (arguments.Length < RequiredArgumentsCount) { throw new InvalidArgumentException( $"{UserMessages.SomeArgumentsAreMissing} {UserMessages.SpecifyArguments}"); } var command = arguments[CommandIndex]; var inputFilePath = arguments[InputFileIndex]; var outputFilePath = arguments[OutputFileIndex]; ValidatePath(inputFilePath, "Input"); ValidatePath(outputFilePath, "Output"); IFileService fileService = FileServiceFactory.GetFileService(); var delegateToCall = GetDelegateToCall(command, fileService); return(() => delegateToCall(inputFilePath, outputFilePath)); }