public MainPageViewModel(INavigationService navigationService, IPreLoaderService preLoaderService) { this.NavigationService = navigationService; this.PreLoaderService = preLoaderService; RegularPageCommand = new DelegateCommand <object>(OnRegularPageCommand_Tapped); PreloadedPageCommand = new DelegateCommand <object>(OnPreloadedPageCommand_Tapped); }
/// <summary> /// Tenta obter o dado em memoria do preloader, caso nao seja encontrado, executa o força a execucao do preloader para obter os dados, tenta obter os dados, e retorna. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="preLoaderService"></param> /// <param name="preLoaderName"></param> /// <param name="fetchFunc"></param> /// <returns></returns> public static async Task <T> GetOrInvokePreLoaderAsync <T>(this IPreLoaderService preLoaderService, string preloaderName, PreLoadParameters parameters = null) where T : class { var response = PreLoaderServiceCore.Instance.GetCachedPreLoadedData <T>(preloaderName, parameters); if (response != default(T)) { return(response); } else //null { //Dispara a execucao do Preloader da implementacao do usuario var observable = PreLoaderServiceCore.Instance.InvokePreLoaderWithObservable <T>(preloaderName, parameters); observable.Subscribe(f => Debug.WriteLine($"Invoked {nameof(PreLoaderReactiveExtensions)}.{nameof(PreLoaderReactiveExtensions.GetOrInvokePreLoaderAsync)}")); await observable.ForEachAsync(x => Debug.WriteLine(x)); //tenta obter o resultado resultante da execucao do preloader... response = PreLoaderServiceCore.Instance.GetCachedPreLoadedData <T>(preloaderName, parameters); return(response); } }
/// <summary> /// Tenta retornar o dado do cache do PreLoader e caso nao seja encontrado força a execucao do preloader para obter os dados, atualiza o cache do PreLoader e retorna os novos dados obtidos. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="preLoaderService"></param> /// <param name="preLoaderName"></param> /// <returns></returns> public static IObservable <T> GetOrInvokePreLoader <T>(this IPreLoaderService preLoaderService, string preLoaderName, PreLoadParameters parameters = null) where T : class { var fetch = Observable.Start <T>(() => PreLoaderServiceCore.Instance.GetCachedPreLoadedData <T>(preLoaderName, parameters), Scheduler) .SelectMany(response => Observable.FromAsync(async() => { if (response != null) { return(response); //retorna o dado do cache do preloader } Debug.WriteLine($"====PreLoaderReactiveExtensions.GetOrInvokePreLoaderObservable() - Thread Id: {Thread.CurrentThread.ManagedThreadId}"); //Forca a execucao do pre-loader... var observable = PreLoaderServiceCore.Instance.InvokePreLoaderWithObservable <T>(preLoaderName, parameters); await observable.ForEachAsync(x => Debug.WriteLine(x)); //tenta obter o resultado do preloader... response = PreLoaderServiceCore.Instance.GetCachedPreLoadedData <T>(preLoaderName, parameters); return(response); })); return(fetch); }
public CountriesPageViewModel(IRemoteDataService remoteDataService, IPreLoaderService preLoaderService) { this.RemoteDataService = remoteDataService; this.preLoaderService = preLoaderService; stopWatch = new Stopwatch(); }