/// <summary>
        /// Callled at runtime.
        /// </summary>
        /// <param name="services">collection service.</param>
        public virtual void ConfigureServices(IServiceCollection services)
        {
            services.AddCorrelate();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo {
                    Title = $"{this.ServiceName} API", Version = "v1"
                });
                c.CustomSchemaIds(x => x.FullName);
            });
            services.AddCloudFoundryActuators(this.Configuration, MediaTypeVersion.V2, ActuatorContext.ActuatorAndCloudFoundry);
            services.AddControllers().ConfigureApiBehaviorOptions(options =>
            {
                options.InvalidModelStateResponseFactory = context =>
                {
                    var appException = new ApplicationException(context.ModelState.Values.SelectMany(v => v.Errors)
                                                                .Select(modelError => new ErrorDetail(StatusCodes.Status400BadRequest.ToString(CultureInfo.InvariantCulture), modelError.ErrorMessage))
                                                                .ToList())
                    {
                        StatusCode = StatusCodes.Status400BadRequest.ToString(CultureInfo.InvariantCulture)
                    };
                    var response        = new ObjectResult(new { appException.Id, appException.Errors, appException.StatusCode });
                    response.StatusCode = StatusCodes.Status400BadRequest;
                    return(response);
                };
            });

            var transientPolicySettings = new TransientPolicySettings(Configuration);

            services.AddSingleton(transientPolicySettings);
            services.RegisterInstace <IHttpRestClient, HttpRestClient>(transientPolicySettings);
            services.AddHealthChecks();
            services.AddCors();
            this.ConfigureComponentServices(services);
        }
        public override void ConfigureComponentServices(IServiceCollection services)
        {
            var transientPolicySettings = new TransientPolicySettings(base.Configuration);

            services.RegisterInstace <IProductService, ProductService>(transientPolicySettings);

            // Add health checks for external services.
            Dictionary <string, string> externalServices = new Dictionary <string, string>();

            //Add external service name and URL
            externalServices.Add("ProductService", "http://localhost:59520");
            services.RegisterHealthChecksForExternalUris(externalServices);
        }