private NuGetSearchServiceReconnector(IServiceBroker serviceBroker, JoinableTaskFactory jtf, INuGetSearchService initialService)
        {
            if (serviceBroker == null)
            {
                throw new ArgumentNullException(nameof(serviceBroker));
            }

            if (jtf == null)
            {
                throw new ArgumentNullException(nameof(jtf));
            }

            if (initialService == null)
            {
                throw new ArgumentNullException(nameof(initialService));
            }

            _disposedTokenSource = new CancellationTokenSource();
            _jtf           = jtf;
            _serviceBroker = serviceBroker;
            _service       = initialService;

            _serviceBroker.AvailabilityChanged += AvailabilityChanged;

            _object = new ManagedNuGetSearchService(this);
        }
예제 #2
0
 private void OnAvailabilityChanged(object sender, BrokeredServicesChangedEventArgs e)
 {
     NuGetUIThreadHelper.JoinableTaskFactory.RunAsync(async() =>
     {
         _searchService?.Dispose();
         _searchService = await GetSearchServiceAsync(CancellationToken.None);
     }).PostOnFailure(nameof(PackageItemLoader), nameof(OnAvailabilityChanged));
 }
예제 #3
0
        private async ValueTask <INuGetSearchService> GetSearchServiceAsync(CancellationToken cancellationToken)
        {
#pragma warning disable ISB001 // Dispose of proxies
            INuGetSearchService searchService = await _serviceBroker.GetProxyAsync <INuGetSearchService>(NuGetServices.SearchService, cancellationToken);

#pragma warning restore ISB001 // Dispose of proxies
            Assumes.NotNull(searchService);
            return(searchService);
        }
예제 #4
0
        private async ValueTask InitializeAsync(INuGetSearchService searchService = null)
        {
            _searchFilter = new SearchFilter(includePrerelease: _includePrerelease)
            {
                SupportedFrameworks = await _context.GetSupportedFrameworksAsync()
            };

            _searchService = searchService ?? await GetSearchServiceAsync(CancellationToken.None);

            _serviceBroker.AvailabilityChanged += OnAvailabilityChanged;
        }
 internal async Task AvailabilityChangedAsync()
 {
     try
     {
         _service?.Dispose();
         _service = await _serviceBroker.GetProxyAsync <INuGetSearchService>(NuGetServices.SearchService, _disposedTokenSource.Token);
     }
     catch (OperationCanceledException) when(_disposedTokenSource.Token.IsCancellationRequested)
     {
         // Expected
     }
 }
예제 #6
0
        // For unit testing purposes
        internal static async ValueTask <PackageItemLoader> CreateAsync(
            IServiceBroker serviceBroker,
            PackageLoadContext context,
            IReadOnlyCollection <PackageSourceContextInfo> packageSources,
            ContractItemFilter itemFilter,
            INuGetSearchService searchService,
            string searchText      = null,
            bool includePrerelease = true,
            bool useRecommender    = false)
        {
            var itemLoader = new PackageItemLoader(
                serviceBroker,
                context,
                packageSources,
                itemFilter,
                searchText,
                includePrerelease,
                useRecommender);

            await itemLoader.InitializeAsync(searchService);

            return(itemLoader);
        }
예제 #7
0
 internal async Task AvailabilityChangedAsync()
 {
     _service?.Dispose();
     _service = await _serviceBroker.GetProxyAsync <INuGetSearchService>(NuGetServices.SearchService, _disposedTokenSource.Token);
 }