internal ConsoleApplicationBootstrapper(IDependancyContainerFactory dependancyContainerFactory,
		                                        ICommandConfigurationRegistry commandConfigurationRegistry,
		                                        IConsoleApplicationFactory consoleApplicationFactory,
		                                        DependancyConfiguration defaultDependancyConfiguration,
		                                        CommandRegistration defaultCommandRegistration,
		                                        ApplicationConfiguration applicationConfiguration)
		{
			_dependancyContainerFactory = dependancyContainerFactory;
			_commandConfigurationRegistry = commandConfigurationRegistry;
			_consoleApplicationFactory = consoleApplicationFactory;
			_userDefinedDependancyConfigurations.Add(defaultDependancyConfiguration);
			_userDefinedCommandRegistrations.Add(defaultCommandRegistration);
			_applicationConfiguration = applicationConfiguration;
		}
		public IConsoleApplication Create(ICommandConfigurationRegistry commandConfigurationRegistry,
		                                  IDependancyContainer dependancyContainer,
		                                  ApplicationConfiguration applicationConfiguration)
		{
			var commandParser = new CommandParser(commandConfigurationRegistry,
			                                      new CommandFactory(dependancyContainer),
			                                      new CommandArgumentParser(
				                                      applicationConfiguration.ValueBinderProviderCollection));
			var resultHandler = new ResultHandler(new ConsoleOutput());
			var consoleInput = new ConsoleInput();
			var exceptionHandler = new ExceptionHandler(applicationConfiguration.ExceptionHandlerConfigurationsCollection);

			return new ConsoleApplication(commandParser, resultHandler, consoleInput, exceptionHandler);
		}