using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; namespace Fengling.RiskControl.Configuration; public static class RiskControlClientExtensions { public static IServiceCollection AddRiskControlClient( this IServiceCollection services, Action configureOptions) { services.Configure(configureOptions); services.AddSingleton, RiskControlClientOptionsValidator>(); services.AddSingleton(sp => sp.GetRequiredService>().Value); return services; } } public class RiskControlClientOptionsValidator : IValidateOptions { public ValidateOptionsResult Validate(string? name, RiskControlClientOptions options) { if (string.IsNullOrEmpty(options.Redis.ConnectionString)) { return ValidateOptionsResult.Fail("Redis.ConnectionString is required"); } return ValidateOptionsResult.Success; } }