public ActionResultFaultlessExecutionService(FaultlessExecution.Abstractions.IFaultlessExecutionService faultlessExecutionService,
                                              Microsoft.Extensions.Logging.ILogger <ActionResultFaultlessExecutionService> logger)
 {
     _faultlessExecutionService           = faultlessExecutionService;
     _faultlessExecutionService.LogErrors = false;//bypass the built in error log, we'll log the errors ourself
     _logger = logger;
 }
        public void Load()
        {
            this.PeopleList = new ObservableCollection <DemoServices.Person>();
            this.CityList   = new ObservableCollection <DemoServices.City>();
            this.AnswerList = new ObservableCollection <DemoServices.Answer>();
            this.ErrorList  = new ObservableCollection <string>();

            if (UseGenericExceptionHandler)
            {
                _faultlessExecutionService = new ShowMessageBoxFaultlesExecutionService(); //this demonstrates how you might write a generic handler so that you don't need to worry about writing .onexeption handlers for all your calls
            }
            else
            {
                _faultlessExecutionService = new FaultlessExecution.FaultlessExecutionService();
            }

            //simple example of testing that something did not error
            var peopleResult = _faultlessExecutionService.TryExecute(() => _database.GetAllThePeopleInTheWorld());

            if (peopleResult.WasSuccessful)
            {
                LoadPersonList(peopleResult.ReturnValue);
            }
            else
            {
                HandleException(peopleResult.Exception);
            }

            //example of using OnException and/or OnSuccess to perform actions based on whether the call was successful or not
            _faultlessExecutionService.TryExecute(() => _webApi.GetSomeCities())
            .OnException((r) => this.HandleException(r.Exception))
            .OnSuccess((r) => this.LoadCityList(r.ReturnValue));

            //example of using the retry logic to rerun the action if it failed
            var cloudResult = _faultlessExecutionService.TryExecute(() => _cloud.GetAllTheAnswers())
                              .Retry(numberOfRetries: 3)
                              .OnException((r) => this.HandleException(r.Exception));

            if (cloudResult.WasSuccessful)
            {
                this.LoadAnswerList(cloudResult.ReturnValue);
            }

            //example of using the retryIf logic to rerun the action if some condition is met
            _faultlessExecutionService.TryExecute(() => _fileSystem.CheckAllOfYourFiles())
            .RetryOnceIf((result) => result.Exception is TimeoutException)
            .OnException((r) => this.HandleException(r.Exception));
        }