/// <summary>
        /// Optional override to create listeners (like tcp, http) for service instance.
        /// </summary>
        /// <returns>The collection of listeners.</returns>
        protected override IEnumerable <ServiceInstanceListener> CreateServiceInstanceListeners()
        {
            return(new[]
            {
                new ServiceInstanceListener(serviceContext =>
                                            new KestrelCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) =>
                {
                    PlatformEventSource.GetInstance().ServiceMessage(serviceContext, $"Starting WebListener on {url}");

                    return
                    new WebHostBuilder()
                    .UseKestrel(opt => opt.AddServerHeader = false)
                    .ConfigureServices(services =>
                                       services
                                       .AddSingleton(serviceContext.CodePackageActivationContext)
                                       .AddSingleton(serviceContext.ServiceName)
                                       .AddSingleton <ITelemetryInitializer>(provider =>
                                                                             FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)))
                    .UseContentRoot(Directory.GetCurrentDirectory())
                    .UseStartup <Startup>()
                    .UseApplicationInsights()
                    .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
                    .UseUrls(url)
                    .Build();
                }))
            });
        }
        /// <summary>
        /// is the entry point of the service host process.
        /// </summary>
        private static void Main()
        {
            try
            {
                using (var diagnosticPipeline = ServiceFabricDiagnosticPipelineFactory.CreatePipeline("Callcredit.Mastered-Data.Callcredit.Insolvencies.Service-Pipeline"))
                {
                    ServiceRuntime.RegisterServiceAsync("ApiType", context => new Service(context)).GetAwaiter().GetResult();

                    PlatformEventSource.Initialise("Callcredit.Mastered-Data.Callcredit.Insolvencies.Service.Platform");
                    PlatformEventSource.GetInstance().ServiceTypeRegistered(Process.GetCurrentProcess().Id, typeof(Service).Name);

                    Thread.Sleep(Timeout.Infinite);
                }
            }
            catch (Exception e)
            {
                PlatformEventSource.GetInstance().ServiceHostInitializationFailed(e.ToString());
                throw;
            }
        }
        /// <summary>
        /// Adds the event sources.
        /// </summary>
        /// <param name="services">The services collection used to configure the Insolvency Service.</param>
        /// <param name="configuration">The configuration settings used in the Insolvency Service.</param>
        public static void AddEventSources(this IServiceCollection services, IConfiguration configuration)
        {
            var eventSources = GetEventSourceConfiguration(configuration);

            RESTServiceEventSource.Initialise(eventSources.RESTServiceEventSource);
            DataAssetEventSource.Initialise(eventSources.DataAssetEventSource);
            PlatformEventSource.Initialise(eventSources.PlatformEventSource);
            DatabaseContextEventSource.Initialise(eventSources.DatabaseContextEventSource);

            var eventSourceForRESTfulServices       = RESTServiceEventSource.GetInstance();
            var eventSourceForRESTfulDataAssets     = DataAssetEventSource.GetInstance();
            var eventSourceForPlatform              = PlatformEventSource.GetInstance();
            var eventSourceForDatabase              = DatabaseContextEventSource.GetInstance();
            var endpointConfigurationsConfigSection = configuration.GetSection("EndpointConfigurations");

            services.Configure <RouteEndpointConfigurations>(endpointConfigurationsConfigSection);
            services.AddSingleton <IRESTServiceEventSource>(eventSourceForRESTfulServices);
            services.AddSingleton <IDataAssetEventSource>(eventSourceForRESTfulDataAssets);
            services.AddSingleton <IPlatformEventSource>(eventSourceForPlatform);
            services.AddSingleton <IApiEventSource>(ApiEventSource.Instance);
            services.AddSingleton <IDatabaseContextEventSource>(eventSourceForDatabase);
        }