コード例 #1
0
        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);
        }
コード例 #2
0
        /// <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);
        }