private TestContainerDiscovererProject( [Import(typeof(SVsServiceProvider))] IServiceProvider serviceProvider, [Import(typeof(IOperationState))] IOperationState operationState, [Import] IPythonWorkspaceContextProvider workspaceContextProvider, [Import] IInterpreterOptionsService interpreterOptionsService ) { _serviceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider)); _workspaceContextProvider = workspaceContextProvider ?? throw new ArgumentNullException(nameof(workspaceContextProvider)); _projectMap = new ConcurrentDictionary <string, ProjectInfo>(); _packageManagerEventSink = new PackageManagerEventSink(interpreterOptionsService); _packageManagerEventSink.InstalledPackagesChanged += OnInstalledPackagesChanged; _firstLoad = true; _isRefresh = false; _setupComplete = false; _deferredTestChangeNotification = new Timer(OnDeferredTestChanged); _solutionListener = new SolutionEventsListener(_serviceProvider); _solutionListener.ProjectLoaded += OnProjectLoaded; _solutionListener.ProjectUnloading += OnProjectUnloaded; _solutionListener.ProjectClosing += OnProjectUnloaded; _solutionListener.SolutionOpened += OnSolutionLoaded; _solutionListener.SolutionClosed += OnSolutionClosed; _solutionListener.StartListeningForChanges(); _testFilesAddRemoveListener = new TestFileAddRemoveListener(_serviceProvider, new Guid()); _testFilesAddRemoveListener.TestFileChanged += OnProjectItemChanged; _testFilesAddRemoveListener.StartListeningForTestFileChanges(); }
void IDisposable.Dispose() { if (!_isDisposed) { _isDisposed = true; _deferredTestChangeNotification.Dispose(); _projectMap.Clear(); _packageManagerEventSink.InstalledPackagesChanged -= OnInstalledPackagesChanged; _packageManagerEventSink.Dispose(); if (_solutionListener != null) { _solutionListener.ProjectLoaded -= OnProjectLoaded; _solutionListener.ProjectUnloading -= OnProjectUnloaded; _solutionListener.ProjectClosing -= OnProjectUnloaded; _solutionListener.Dispose(); } if (_testFilesUpdateWatcher != null) { _testFilesUpdateWatcher.FileChangedEvent -= OnProjectItemChanged; _testFilesUpdateWatcher.Dispose(); _testFilesUpdateWatcher = null; } if (_testFilesAddRemoveListener != null) { _testFilesAddRemoveListener.TestFileChanged -= OnProjectItemChanged; _testFilesAddRemoveListener.Dispose(); _testFilesAddRemoveListener = null; } } }
public TestContainerDiscoverer(IServiceProvider serviceProvider, SolutionEventsListener solutionListener, TestFilesUpdateWatcher testFilesUpdateWatcher, TestFileAddRemoveListener testFilesAddRemoveListener, IOperationState operationState) { ValidateArg.NotNull(serviceProvider, "serviceProvider"); ValidateArg.NotNull(solutionListener, "solutionListener"); ValidateArg.NotNull(testFilesUpdateWatcher, "testFilesUpdateWatcher"); ValidateArg.NotNull(testFilesAddRemoveListener, "testFilesAddRemoveListener"); ValidateArg.NotNull(operationState, "operationState"); _fileRootMap = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); _knownProjects = new Dictionary <string, ProjectInfo>(StringComparer.OrdinalIgnoreCase); _serviceProvider = serviceProvider; _testFilesAddRemoveListener = testFilesAddRemoveListener; _testFilesAddRemoveListener.TestFileChanged += OnProjectItemChanged; _solutionListener = solutionListener; _solutionListener.ProjectLoaded += OnProjectLoaded; _solutionListener.ProjectUnloading += OnProjectUnloaded; _solutionListener.ProjectClosing += OnProjectUnloaded; _solutionListener.ProjectRenamed += OnProjectRenamed; _solutionListener.BuildCompleted += OnBuildCompleted; _solutionListener.BuildStarted += OnBuildStarted; _testFilesUpdateWatcher = testFilesUpdateWatcher; _testFilesUpdateWatcher.FileChangedEvent += OnProjectItemChanged; operationState.StateChanged += OperationStateChanged; _firstLoad = true; }