using IM_API.Application.EventHandlers; using IM_API.Application.Interfaces; using IM_API.Domain.Events; using IM_API.Dtos; using IM_API.Infrastructure.EventBus; using IM_API.Interface.Services; using IM_API.Services; using IM_API.Tools; using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Mvc; using RedLockNet; using RedLockNet.SERedis; using RedLockNet.SERedis.Configuration; using StackExchange.Redis; namespace IM_API.Configs { public static class ServiceCollectionExtensions { public static IServiceCollection AddAllService(this IServiceCollection services, IConfiguration configuration) { services.AddAutoMapper(typeof(MapperConfig)); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(sp => { var connection = sp.GetRequiredService(); // 这里可以配置多个 Redis 节点提高安全性,单机运行传一个即可 return RedLockFactory.Create(new List { new RedLockMultiplexer(connection) }); }); return services; } public static IServiceCollection AddModelValidation(this IServiceCollection services, IConfiguration configuration) { services.Configure(options => { options.InvalidModelStateResponseFactory = context => { var errors = context.ModelState .Where(e => e.Value.Errors.Count > 0) .Select(e => new { Field = e.Key, Message = e.Value.Errors.First().ErrorMessage }); Console.WriteLine(errors); return new BadRequestObjectResult(new BaseResponse(CodeDefine.PARAMETER_ERROR.Code, errors.First().Message)); }; }); return services; } } }