public static void SignalRConfiguration(this IServiceCollection services, IConfiguration configuration) { services.AddSignalR() .AddJsonProtocol(x => { x.PayloadSerializerOptions.IgnoreNullValues = false; x.PayloadSerializerOptions.PropertyNameCaseInsensitive = false; x.PayloadSerializerOptions.WriteIndented = false; }) .AddMessagePackProtocol() .AddStackExchangeRedis(o => { o.ConnectionFactory = async writer => { var config = new StackExchange.Redis.ConfigurationOptions { AbortOnConnectFail = false, ResolveDns = true }; config.EndPoints.Add(configuration.GetConnectionString("Redis"), 6379); config.SetDefaultPorts(); var connection = await ConnectionMultiplexer.ConnectAsync(config, writer); connection.ConnectionFailed += (_, e) => { Console.WriteLine("Connection to Redis failed."); }; if (!connection.IsConnected) { Console.WriteLine("Did not connect to Redis."); } return(connection); }; }); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddOptions(); services.AddControllers(); services.AddMvc(config => { config.Filters.Add(new ProducesAttribute("application/json")); //config.Filters.Add(new ConsumesAttribute("application/json")); }) .AddFluentValidation() .AddJsonOptions(x => { x.JsonSerializerOptions.WriteIndented = false; x.JsonSerializerOptions.PropertyNameCaseInsensitive = false; x.JsonSerializerOptions.IgnoreNullValues = false; }); services.Configure <GzipCompressionProviderOptions>(options => options.Level = CompressionLevel.Optimal); services.AddResponseCompression(options => options.Providers.Add <GzipCompressionProvider>()); services.AddSignalR() .AddJsonProtocol(x => { x.PayloadSerializerOptions.IgnoreNullValues = false; x.PayloadSerializerOptions.PropertyNameCaseInsensitive = false; x.PayloadSerializerOptions.WriteIndented = false; }) .AddMessagePackProtocol() .AddStackExchangeRedis(o => { o.ConnectionFactory = async writer => { var config = new StackExchange.Redis.ConfigurationOptions { AbortOnConnectFail = false, ResolveDns = true }; config.EndPoints.Add(Configuration.GetConnectionString("Redis"), 6379); config.SetDefaultPorts(); var connection = await ConnectionMultiplexer.ConnectAsync(config, writer); connection.ConnectionFailed += (_, e) => { Console.WriteLine("Connection to Redis failed."); }; if (!connection.IsConnected) { Console.WriteLine("Did not connect to Redis."); } return(connection); }; }); services.AddCors(); services.AddEntityFrameworkSqlServer() .AddDbContext <ChatContext>((serviceProvider, options) => { options.UseApplicationServiceProvider(serviceProvider); options.UseInternalServiceProvider(serviceProvider); options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")); }); services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>(); services.AddScoped <ChatContext>(); // Health Checks services.AddHealthChecks() .AddSqlServer(Configuration.GetConnectionString("DefaultConnection"), name: "MSSQL") .AddRedis(Configuration.GetConnectionString("Redis"), name: "REDIS"); services .AddHealthChecksUI(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "Chat API", Version = "v1" }); c.EnableAnnotations(); }); }