fengling-risk-control/Fengling.RiskControl.Client/Configuration/RiskControlClientExtensions.cs
Sam 293209b1dc feat: add Fengling.RiskControl.Client SDK
- Implement RedisCounterService for rate limiting
- Implement RuleLoader with timer refresh
- Implement RiskEvaluator for local rule evaluation
- Implement SamplingService for CAP events
- Implement CapEventPublisher for async event publishing
- Implement FailoverStrategy for Redis failure handling
- Add configuration classes and DI extensions
- Add unit tests (9 tests)
- Add NuGet publishing script
2026-02-06 00:16:53 +08:00

31 lines
1.1 KiB
C#

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