public VsSourceControlTracker(
            ISolutionManager solutionManager, 
            IFileSystemProvider fileSystemProvider,
            IVsTrackProjectDocuments2 projectTracker,
            ISettings solutionSettings)
        {
            if (projectTracker == null)
            {
                throw new ArgumentNullException("projectTracker");
            }

            _solutionManager = solutionManager;
            _projectTracker = projectTracker;
            _fileSystemProvider = fileSystemProvider;
            _solutionSettings = solutionSettings;
            _projectDocumentListener = new TrackProjectDocumentEventListener(this);

            _solutionManager.SolutionOpened += OnSolutionOpened;
            _solutionManager.SolutionClosed += OnSolutionClosed;

            if (_solutionManager.IsSolutionOpen)
            {
                StartTracking();
            }
        }
        public VsSourceControlTracker(
            ISolutionManager solutionManager,
            IFileSystemProvider fileSystemProvider,
            IVsTrackProjectDocuments2 projectTracker,
            ISettings solutionSettings)
        {
            if (projectTracker == null)
            {
                throw new ArgumentNullException("projectTracker");
            }

            _solutionManager         = solutionManager;
            _projectTracker          = projectTracker;
            _fileSystemProvider      = fileSystemProvider;
            _solutionSettings        = solutionSettings;
            _projectDocumentListener = new TrackProjectDocumentEventListener(this);

            _solutionManager.SolutionOpened += OnSolutionOpened;
            _solutionManager.SolutionClosed += OnSolutionClosed;

            if (_solutionManager.IsSolutionOpen)
            {
                StartTracking();
            }
        }
        public VsSourceControlTracker(
            ISolutionManager solutionManager,
            ISourceControlManagerProvider sourceControlManagerProvider,
            IVsTrackProjectDocuments2 projectTracker,
            Configuration.ISettings vsSettings)
        {
            if (projectTracker == null)
            {
                throw new ArgumentNullException("projectTracker");
            }

            if (solutionManager == null)
            {
                throw new ArgumentNullException("solutionManager");
            }

            _solutionManager = solutionManager;
            _projectTracker  = projectTracker;
            _sourceControlManagerProvider = sourceControlManagerProvider;
            _vsSettings = vsSettings;
            _projectDocumentListener = new TrackProjectDocumentEventListener(this);

            _solutionManager.SolutionOpened += OnSolutionOpened;
            _solutionManager.SolutionClosed += OnSolutionClosed;

            if (_solutionManager.IsSolutionOpen)
            {
                StartTracking();
            }
        }
        public VsSourceControlTracker(
            [Import(typeof(SVsServiceProvider))]
            IServiceProvider serviceProvider,
            ISolutionManager solutionManager,
            ISourceControlManagerProvider sourceControlManagerProvider,
            Configuration.ISettings vsSettings)
        {
            if (serviceProvider == null)
            {
                throw new ArgumentNullException(nameof(serviceProvider));
            }

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

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

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

            _solutionManager = solutionManager;
            _sourceControlManagerProvider = sourceControlManagerProvider;
            _vsSettings = vsSettings;

            _projectTracker = new AsyncLazy <IVsTrackProjectDocuments2>(async() =>
            {
                await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
                return(serviceProvider.GetService <SVsTrackProjectDocuments, IVsTrackProjectDocuments2>());
            },
                                                                        ThreadHelper.JoinableTaskFactory);

            _projectDocumentListener = new TrackProjectDocumentEventListener(this);

            _solutionManager.SolutionOpened += OnSolutionOpened;
            _solutionManager.SolutionClosed += OnSolutionClosed;

            if (_solutionManager.IsSolutionOpen)
            {
                StartTracking();
            }
        }