public async Task <ITripDetector> Create()
        {
            var configuration = await this.configurationRepository.GetTripDetectionConfigurationAsync(nameof(TripDetectorFactory));

            if (configuration == null)
            {
                configuration = await this.configurationRepository.AddAsync(
                    new Configuration(
                        ConfigurationExtensions.GetAssemblyNamespace(),
                        nameof(TripDetectorFactory),
                        "Determines which Trip detector will be used for trip detection",
                        TripDetectorType.SimpleHeuristic));
            }

            var type = configuration.GetValue <TripDetectorType>();

            return(await Create(type));
        }
        public IEnumerable <IModuleLoader> GetModuleLoaders()
        {
            var manager = new ModuleConfigurationManager(
                configurationRepository,
                ConfigurationExtensions.GetAssemblyNamespace(),
                nameof(TimeBasedTripDetector));

            return(new List <IModuleLoader>
            {
                manager.LoadModuleAsync <PointLoaderModule>(this.trackingPointRepository),
                manager.LoadModuleAsync <NoiseRemovalModule>(),
                manager.LoadModuleAsync <ClusteredStopDetectorModule>(),
                manager.LoadModuleAsync <EdgeStopDetectorModule>(),
                manager.LoadModuleAsync <BlackoutStopDetectorModule>(),
                manager.LoadModuleAsync <StopToLocationMapperModule>(this.locationRepository),
                manager.LoadModuleAsync <LegCandidateExtractorModule>(),
                manager.LoadModuleAsync <TimeBasedTripExtractorModule>(),
                manager.LoadModuleAsync <PersistenceModule>(this.trackingPointRepository, this.tripRepository, this.locationRepository, this.bingMapsKey)
            });
        }