/// <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); }
/// <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> /// Added contexts and sql data log /// </summary> /// <param name="services"></param> /// <param name="configuration"></param> /// <param name="config"></param> /// <returns></returns> public static IServiceCollection AddContext(this IServiceCollection services, IConfiguration configuration, ConnectionStringsConfigModel config) { var provider = new NLogLoggerProvider(); _logger = provider.CreateLogger(Literal.SqlLog); _configuration = configuration; services.AddDbContext <DotNetConfContext>(options => { options.UseSqlServer(config.Test, sqlOptions => sqlOptions.MigrationsAssembly(typeof(DotNetConfContext).GetTypeInfo().Assembly.GetName().Name)) .LogTo(Log, new[] { RelationalEventId.CommandExecuted }) .EnableSensitiveDataLogging(); // uncomment this }, ServiceLifetime.Transient ); services.AddDbContext <ReadOnlyDbContext>(options => { options.UseSqlServer(config.TestReadOnly, sqlOptions => sqlOptions.MigrationsAssembly(typeof(ReadOnlyDbContext).GetTypeInfo().Assembly.GetName().Name)) .LogTo(Log, new[] { RelationalEventId.CommandExecuted }); //.EnableSensitiveDataLogging(); }, ServiceLifetime.Transient ); return(services); }