示例#1
0
        /// <summary>
        /// ConfigureServices
        /// </summary>
        /// <param name="services"></param>
        public void ConfigureServices(IServiceCollection services)
        {
            var connectionStringsConfigModel = new ConnectionStringsConfigModel();

            Configuration.GetSection(Literal.ConnectionStrings).Bind(connectionStringsConfigModel);


            var healthChecksConfigModel = new HealthChecksConfigModel();

            Configuration.GetSection(Literal.HealthChecksUI).Bind(healthChecksConfigModel);

            services.AddControllers();
            services.AddSwagger();
            services.ConfigureHealthChecks(connectionStringsConfigModel, healthChecksConfigModel);
            services.AddContext(Configuration, connectionStringsConfigModel);

            //for reference loop handling
            //services.AddControllersWithViews().AddJsonOptions(options =>
            //{
            //    options.JsonSerializerOptions.ReferenceHandler = System.Text.Json.Serialization.ReferenceHandler.Preserve;
            //});

            services.AddTransient <IPersonService, PersonService>();
        }
        /// <summary>
        /// UseHealthChecks
        /// </summary>
        /// <param name="services"></param>
        /// <param name="connectionStringConfig"></param>
        /// <param name="healthChecksConfig"></param>
        /// <returns></returns>
        public static IServiceCollection ConfigureHealthChecks(this IServiceCollection services,
                                                               ConnectionStringsConfigModel connectionStringConfig, HealthChecksConfigModel healthChecksConfig)
        {
            services.AddHealthChecks().AddApplicationInsightsPublisher()
            .AddSqlServer(connectionStringConfig.Test, name: Literal.Master)
            .AddSqlServer(connectionStringConfig.TestReadOnly, name: Literal.ReadOnly);

            services.AddHealthChecksUI(opt =>
            {
                opt.SetEvaluationTimeInSeconds(healthChecksConfig.EvaluationTimeOnSeconds);                                     //time in seconds between check
                opt.SetMinimumSecondsBetweenFailureNotifications(healthChecksConfig.MinimumSecondsBetweenFailureNotifications); //maximum history of checks
                opt.AddHealthCheckEndpoint(Literal.SwaggerTitle, Literal.Health);                                               //map health check api
            })
            .AddInMemoryStorage();                                                                                              //Storing in memory

            return(services);
        }