/// <summary>
        /// Does the actual bootstrapping.
        /// </summary>
        public static void BootFromConfiguration()
        {
            // get the api configuration.
            var apiConfiguration = (TileApiConfiguration)ConfigurationManager.GetSection("TileApiConfiguration");

            // load all relevant routers.
            foreach (InstanceConfiguration instanceConfiguration in apiConfiguration.Instances)
            {
                var thread = new System.Threading.Thread(new System.Threading.ThreadStart(() =>
                {
                    // load instance.
                    if (LoadInstance(apiConfiguration, instanceConfiguration))
                    { // instance loaded correctly.
                        // start monitoring files...
                        if (apiConfiguration.Monitor)
                        { // ...but only when configured as such.
                            var monitor = new InstanceMonitor(apiConfiguration, instanceConfiguration, LoadInstance);
                            _instanceMonitors.Add(monitor);

                            // get data file configuration.
                            var data = instanceConfiguration.Data;
                            if (!string.IsNullOrWhiteSpace(data))
                            { // monitor data.
                                monitor.AddFile(data);
                            }
                            // get mapcss configuration.
                            var mapCSS = instanceConfiguration.MapCSS;
                            if (!string.IsNullOrWhiteSpace(mapCSS))
                            { // monitor mapcss.
                                monitor.AddFile(mapCSS);
                            }
                            monitor.Start();
                        }
                    }
                }));
                thread.Start();
            }
        }
        /// <summary>
        /// Initializes all routing instance from the configuration in the configuration file.
        /// </summary>
        public static void BootFromConfiguration()
        {
            // register vehicle profiles.
            Vehicle.RegisterVehicles();

            // enable logging and use the console as output.
            OsmSharp.Logging.Log.Enable();
            OsmSharp.Logging.Log.RegisterListener(
                new OsmSharp.WinForms.UI.Logging.ConsoleTraceListener());
#if DEBUG
            OsmSharp.Logging.Log.RegisterListener(
                new Logging.DebugTraceListener());
#endif

            // get the api configuration.
            var apiConfiguration = (ApiConfiguration)ConfigurationManager.GetSection("ApiConfiguration");

            // load all relevant routers.
            foreach (InstanceConfiguration instanceConfiguration in apiConfiguration.Instances)
            {
                var thread = new System.Threading.Thread(new System.Threading.ThreadStart(() =>
                {
                    // load instance.
                    if (LoadInstance(apiConfiguration, instanceConfiguration))
                    { // instance loaded correctly.
                        // start monitoring files...
                        if (instanceConfiguration.Monitor)
                        { // ...but only when configured as such.
                            var monitor = new InstanceMonitor(apiConfiguration, instanceConfiguration, LoadInstance);
                            _instanceMonitors.Add(monitor);

                            // get graph configuration.
                            var graph = instanceConfiguration.Graph;
                            monitor.AddFile(graph);
                            monitor.Start();
                        }
                    }
                }));
                thread.Start();
            }
        }