using Microsoft.AspNetCore.Mvc; using Microsoft.eShopOnContainers.WebMVC.ViewModels; using Microsoft.eShopOnContainers.WebMVC.Services; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Polly.CircuitBreaker; namespace Microsoft.eShopOnContainers.WebMVC.ViewComponents { public class CartList : ViewComponent { private readonly IBasketService _cartSvc; public CartList(IBasketService cartSvc) => _cartSvc = cartSvc; public async Task InvokeAsync(ApplicationUser user) { var vm = new Basket(); try { vm = await GetItemsAsync(user); return View(vm); } catch (BrokenCircuitException) { // Catch error when Basket.api is in circuit-opened mode TempData["BasketInoperativeMsg"] = "Basket Service is inoperative, please try later on. (Business Msg Due to Circuit-Breaker)"; } return View(vm); } private Task GetItemsAsync(ApplicationUser user) => _cartSvc.GetBasket(user); } }