public async Task <IActionResult> Edit(int id, [Bind("Id,PolicyName,PolicyDescription,PolicyCondition")] PolicyTypes policyTypes) { if (id != policyTypes.Id) { return(NotFound()); } if (ModelState.IsValid) { try { _context.Update(policyTypes); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!PolicyTypesExists(policyTypes.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } return(View(policyTypes)); }
public async Task <T> GetWithPolicy <T>(PolicyTypes policyType, Func <Task <T> > apiCall, Func <Task <T> > fallbackCall) { if ((policyType & (PolicyTypes.AnyFallback)) != 0 && fallbackCall == null) { throw new ArgumentNullException(nameof(fallbackCall)); } return(await ExecuteWithPolicy <T>(policyType, apiCall, fallbackCall)); }
public async Task <IActionResult> Create([Bind("Id,PolicyName,PolicyDescription,PolicyCondition")] PolicyTypes policyTypes) { if (ModelState.IsValid) { _context.Add(policyTypes); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } return(View(policyTypes)); }
private async Task <T> ExecuteWithPolicy <T>(PolicyTypes policyType, Func <Task <T> > apiCall, Func <Task <T> > fallbackCall) { _logger.Write($"GetWithPolicy: {policyType}"); switch (policyType) { case PolicyTypes.Retry: return(await CreateRetryPolicy() .ExecuteAsync(apiCall)); case PolicyTypes.CircuitBreaker: return(await _circuitBreaker .ExecuteAsync(apiCall)); case PolicyTypes.Fallback: return(await CreateFallbackPolicy <T>(fallbackCall) .ExecuteAsync(apiCall)); case PolicyTypes.CircuitBreakerWithFallBack: return(await CreateFallbackPolicy <T>(fallbackCall) .WrapAsync(_circuitBreaker) .ExecuteAsync(apiCall)); case PolicyTypes.RetryWithFallBack: return(await CreateFallbackPolicy <T>(fallbackCall) .WrapAsync(CreateRetryPolicy()) .ExecuteAsync(apiCall)); case PolicyTypes.CircuitBreakerWithRetryAndFallBack: return(await CreateFallbackPolicy <T>(fallbackCall) .WrapAsync(CreateRetryPolicy()) .WrapAsync(_circuitBreaker) .ExecuteAsync(apiCall)); default: return(await apiCall.Invoke()); } }
public void ThrowWhenFallbackIsNull(PolicyTypes type) => new Func <Task>(async() => await _pollyService.GetWithPolicy <string>(type, () => default(Task <string>), null)) .Should().Throw <ArgumentNullException>();