public RecoveryOptions Build() { var recoveryOptions = new RecoveryOptions(); if (_recoveryOptionsSection != null && _recoveryOptionsSection.Exists()) { recoveryOptions = _recoveryOptionsSection.Get <RecoveryOptions>(); _services.Configure <RecoveryOptions>(_recoveryOptionsSection); } else { recoveryOptions.MaxRetryAttempts = _defaultMaxRetryAttempts; recoveryOptions.CircuitBreakerOptions = _circuitBreakerOptions; } if (_exceptionPredicates.Count > 0) { _services.AddSingleton <IRetryExceptionPredicatesProvider>(new ConfigRetryExceptionPredicatesProvider(_exceptionPredicates)); } if (recoveryOptions.CircuitBreakerOptions is null) { recoveryOptions.CircuitBreakerOptions = CircuitBreakerOptionsBuilder.Create(_services).Build(); } _services.AddSingleton(recoveryOptions); return(recoveryOptions); }
/// <summary> /// Allows <see cref="CircuitBreaker"/> configuration /// </summary> /// <param name="builder">The <see cref="CircuitBreakerOptionsBuilder"/></param> /// <returns><see cref="RecoveryOptionsBuilder"/></returns> public RecoveryOptionsBuilder WithCircuitBreaker(Action <CircuitBreakerOptionsBuilder> builder) { var b = CircuitBreakerOptionsBuilder.Create(_services); builder?.Invoke(b); _circuitBreakerOptions = b.Build(); return(this); }