public DependenciesProjectTreeProvider(
            IProjectThreadingService threadingService,
            UnconfiguredProject project,
            IDependenciesSnapshotProvider dependenciesSnapshotProvider,
            [Import(DependencySubscriptionsHost.DependencySubscriptionsHostContract)]
            ICrossTargetSubscriptionsHost dependenciesHost,
            [Import(ExportContractNames.Scopes.UnconfiguredProject)] IProjectAsynchronousTasksService tasksService,
            IDependencyTreeTelemetryService treeTelemetryService)
            : base(threadingService, project)
        {
            ProjectTreePropertiesProviders = new OrderPrecedenceImportCollection <IProjectTreePropertiesProvider>(
                ImportOrderPrecedenceComparer.PreferenceOrder.PreferredComesLast,
                projectCapabilityCheckProvider: project);

            ViewProviders = new OrderPrecedenceImportCollection <IDependenciesTreeViewProvider>(
                ImportOrderPrecedenceComparer.PreferenceOrder.PreferredComesFirst,
                projectCapabilityCheckProvider: project);

            DependenciesSnapshotProvider = dependenciesSnapshotProvider;
            DependenciesHost             = dependenciesHost;
            TasksService          = tasksService;
            _treeTelemetryService = treeTelemetryService;

            project.ProjectUnloading += OnUnconfiguredProjectUnloading;
        }
예제 #2
0
        public DependenciesProjectTreeProvider(
            IProjectThreadingService threadingService,
            IProjectAccessor projectAccessor,
            UnconfiguredProject unconfiguredProject,
            IDependenciesSnapshotProvider dependenciesSnapshotProvider,
            [Import(DependenciesSnapshotProvider.DependencySubscriptionsHostContract)] ICrossTargetSubscriptionsHost dependenciesHost,
            [Import(ExportContractNames.Scopes.UnconfiguredProject)] IProjectAsynchronousTasksService tasksService,
            IDependencyTreeTelemetryService treeTelemetryService)
            : base(threadingService, unconfiguredProject)
        {
            _projectTreePropertiesProviders = new OrderPrecedenceImportCollection <IProjectTreePropertiesProvider>(
                ImportOrderPrecedenceComparer.PreferenceOrder.PreferredComesLast,
                projectCapabilityCheckProvider: unconfiguredProject);

            _viewProviders = new OrderPrecedenceImportCollection <IDependenciesTreeViewProvider>(
                ImportOrderPrecedenceComparer.PreferenceOrder.PreferredComesFirst,
                projectCapabilityCheckProvider: unconfiguredProject);

            _dependenciesSnapshotProvider = dependenciesSnapshotProvider;
            _dependenciesHost             = dependenciesHost;
            _tasksService         = tasksService;
            _projectAccessor      = projectAccessor;
            _treeTelemetryService = treeTelemetryService;

            // Hook this so we can unregister the snapshot change event when the project unloads
            unconfiguredProject.ProjectUnloading += OnUnconfiguredProjectUnloading;

            Task OnUnconfiguredProjectUnloading(object sender, EventArgs args)
            {
                UnconfiguredProject.ProjectUnloading -= OnUnconfiguredProjectUnloading;
                _snapshotEventListener?.Dispose();

                return(Task.CompletedTask);
            }
        }
        public DependenciesSnapshotProvider(
            IUnconfiguredProjectCommonServices commonServices,
            Lazy <AggregateCrossTargetProjectContextProvider> contextProvider,
            IUnconfiguredProjectTasksService tasksService,
            IActiveConfiguredProjectSubscriptionService activeConfiguredProjectSubscriptionService,
            IActiveProjectConfigurationRefreshService activeProjectConfigurationRefreshService,
            ITargetFrameworkProvider targetFrameworkProvider,
            IDependencyTreeTelemetryService dependencyTreeTelemetryService)
            : base(commonServices.ThreadingService.JoinableTaskContext)
        {
            _commonServices = commonServices;
            _tasksService   = tasksService;
            _activeConfiguredProjectSubscriptionService = activeConfiguredProjectSubscriptionService;
            _targetFrameworkProvider        = targetFrameworkProvider;
            _dependencyTreeTelemetryService = dependencyTreeTelemetryService;

            _dependencySubscribers = new OrderPrecedenceImportCollection <IDependencyCrossTargetSubscriber>(
                projectCapabilityCheckProvider: commonServices.Project);

            _snapshotFilters = new OrderPrecedenceImportCollection <IDependenciesSnapshotFilter>(
                ImportOrderPrecedenceComparer.PreferenceOrder.PreferredComesLast,
                projectCapabilityCheckProvider: commonServices.Project);

            _subTreeProviders = new OrderPrecedenceImportCollection <IProjectDependenciesSubTreeProvider>(
                ImportOrderPrecedenceComparer.PreferenceOrder.PreferredComesLast,
                projectCapabilityCheckProvider: commonServices.Project);

            _context = new ContextTracker(targetFrameworkProvider, commonServices, contextProvider, activeProjectConfigurationRefreshService);

            _snapshot = new SnapshotUpdater(commonServices.ThreadingService, tasksService.UnloadCancellationToken);

            _disposables = new DisposableBag {
                _snapshot, _contextUpdateGate
            };
        }
예제 #4
0
        public DependencyRulesSubscriber(
            IUnconfiguredProjectCommonServices commonServices,
            IUnconfiguredProjectTasksService tasksService,
            IDependencyTreeTelemetryService treeTelemetryService)
            : base(commonServices.ThreadingService, tasksService)
        {
            _handlers = new OrderPrecedenceImportCollection <IDependenciesRuleHandler>(
                projectCapabilityCheckProvider: commonServices.Project);

            _treeTelemetryService = treeTelemetryService;

            _watchedJointRules      = new Lazy <string[]>(() => GetRuleNames(RuleSource.Joint));
            _watchedEvaluationRules = new Lazy <string[]>(() => GetRuleNames(RuleSource.Evaluation));

            string[] GetRuleNames(RuleSource source)
            {
                var rules = new HashSet <string>(StringComparers.RuleNames);

                foreach (Lazy <IDependenciesRuleHandler, IOrderPrecedenceMetadataView> item in _handlers)
                {
                    rules.Add(item.Value.EvaluatedRuleName);

                    if (source == RuleSource.Joint)
                    {
                        rules.Add(item.Value.ResolvedRuleName);
                    }
                }

                return(rules.ToArray());
            }
        }
 public DependencyRulesSubscriber(
     IUnconfiguredProjectCommonServices commonServices,
     [Import(ExportContractNames.Scopes.UnconfiguredProject)] IProjectAsynchronousTasksService tasksService,
     IDependencyTreeTelemetryService treeTelemetryService)
     : base(commonServices, tasksService, treeTelemetryService)
 {
     DependencyRuleHandlers = new OrderPrecedenceImportCollection <ICrossTargetRuleHandler <DependenciesRuleChangeContext> >(
         projectCapabilityCheckProvider: commonServices.Project);
 }
예제 #6
0
 public CrossTargetRuleSubscriberBase(
     IUnconfiguredProjectCommonServices commonServices,
     IProjectAsynchronousTasksService tasksService,
     IDependencyTreeTelemetryService treeTelemetryService)
     : base(synchronousDisposal: true)
 {
     _commonServices       = commonServices;
     _tasksService         = tasksService;
     _treeTelemetryService = treeTelemetryService;
 }
예제 #7
0
 public CrossTargetRuleSubscriberBase(
     IUnconfiguredProjectCommonServices commonServices,
     IProjectAsynchronousTasksService tasksService,
     IDependencyTreeTelemetryService treeTelemetryService)
     : base(commonServices.ThreadingService.JoinableTaskContext)
 {
     _tasksService                     = tasksService;
     _treeTelemetryService             = treeTelemetryService;
     _evaluationSubscriptionLinks      = new List <IDisposable>();
     _designTimeBuildSubscriptionLinks = new List <IDisposable>();
 }
        public DependencyRulesSubscriber(
            IUnconfiguredProjectCommonServices commonServices,
            IUnconfiguredProjectTasksService tasksService,
            IDependencyTreeTelemetryService treeTelemetryService)
            : base(commonServices.ThreadingService.JoinableTaskContext)
        {
            _handlers = new OrderPrecedenceImportCollection <IDependenciesRuleHandler>(
                projectCapabilityCheckProvider: commonServices.Project);

            _commonServices       = commonServices;
            _tasksService         = tasksService;
            _treeTelemetryService = treeTelemetryService;
        }
        public DependencyRulesSubscriber(
            IUnconfiguredProjectCommonServices commonServices,
            [Import(ExportContractNames.Scopes.UnconfiguredProject)] IProjectAsynchronousTasksService tasksService,
            IDependencyTreeTelemetryService treeTelemetryService)
            : base(synchronousDisposal: true)
        {
            _handlers = new OrderPrecedenceImportCollection <IDependenciesRuleHandler>(
                projectCapabilityCheckProvider: commonServices.Project);

            _commonServices       = commonServices;
            _tasksService         = tasksService;
            _treeTelemetryService = treeTelemetryService;
        }