- 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
31 lines
1.1 KiB
C#
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;
|
|
}
|
|
}
|