public ExplorerPageViewModel(ExplorerPage page, IPackageLoaderService packagesLoaderService,
                                     IModelProvider <ExplorerSettingsContainer> settingsProvider, IPackageMetadataMediaDownloadService packageMetadataMediaDownloadService, INuGetFeedVerificationService nuGetFeedVerificationService,
                                     ICommandManager commandManager, IDispatcherService dispatcherService, IRepositoryContextService repositoryService, ITypeFactory typeFactory,
                                     IDefferedPackageLoaderService defferedPackageLoaderService, IPackageOperationContextService packageOperationContextService, INuGetCacheManager nuGetCacheManager,
                                     INuGetConfigurationService nuGetConfigurationService, IDispatcherProviderService dispatcherProviderService)
        {
            Argument.IsNotNull(() => packagesLoaderService);
            Argument.IsNotNull(() => settingsProvider);
            Argument.IsNotNull(() => packageMetadataMediaDownloadService);
            Argument.IsNotNull(() => commandManager);
            Argument.IsNotNull(() => nuGetFeedVerificationService);
            Argument.IsNotNull(() => dispatcherService);
            Argument.IsNotNull(() => repositoryService);
            Argument.IsNotNull(() => typeFactory);
            Argument.IsNotNull(() => defferedPackageLoaderService);
            Argument.IsNotNull(() => packageOperationContextService);
            Argument.IsNotNull(() => nuGetCacheManager);
            Argument.IsNotNull(() => nuGetConfigurationService);
            Argument.IsNotNull(() => dispatcherProviderService);

            _dispatcherService = dispatcherService;
            _packageMetadataMediaDownloadService = packageMetadataMediaDownloadService;
            _nuGetFeedVerificationService        = nuGetFeedVerificationService;
            _repositoryService              = repositoryService;
            _defferedPackageLoaderService   = defferedPackageLoaderService;
            _packageOperationContextService = packageOperationContextService;
            _typeFactory               = typeFactory;
            _packagesLoaderService     = packagesLoaderService;
            _nuGetCacheManager         = nuGetCacheManager;
            _nuGetConfigurationService = nuGetConfigurationService;
            _dispatcherProviderService = dispatcherProviderService;
            Settings = settingsProvider.Model;

            LoadNextPackagePage = new TaskCommand(LoadNextPackagePageExecuteAsync);
            CancelPageLoading   = new TaskCommand(CancelPageLoadingExecuteAsync);
            RefreshCurrentPage  = new TaskCommand(RefreshCurrentPageExecuteAsync);

            commandManager.RegisterCommand(nameof(RefreshCurrentPage), RefreshCurrentPage, this);

            Title = page.Parameters.Tab.Name;
            _initialSearchParams = page.Parameters.InitialSearchParameters; //if null, standard Settings will not be overriden

            if (Title != "Browse")
            {
#pragma warning disable IDISP004 // Don't ignore created IDisposable.
                _packagesLoaderService = this.GetServiceLocator().ResolveType <IPackageLoaderService>(Title);
#pragma warning restore IDISP004 // Don't ignore created IDisposable.
            }

            if (!Enum.TryParse(Title, out _pageType))
            {
                Log.Error("Unrecognized page type");
            }

            CanBatchProjectActions = _pageType != MetadataOrigin.Installed;

            Page = page;
        }
        public static async Task <IEnumerable <IPackageSearchMetadata> > LoadWithDefaultsAsync(this IPackageLoaderService packageLoaderService, string repository, CancellationToken token = default)
        {
            Argument.IsNotNull(() => packageLoaderService);

            var defaultFilter   = new SearchFilter(true);
            var localPagination = new PageContinuation(0, new PackageSourceWrapper(repository));

            return(await packageLoaderService.LoadAsync(string.Empty, localPagination, defaultFilter, token));
        }