public ProjectManagementCloseApplicationWatcher(IProjectManager projectManager, IPleaseWaitService pleaseWaitService,
                                                        ISaveProjectChangesService saveProjectChangesService)
        {
            Argument.IsNotNull(() => projectManager);
            Argument.IsNotNull(() => pleaseWaitService);
            Argument.IsNotNull(() => saveProjectChangesService);

            _projectManager            = projectManager;
            _pleaseWaitService         = pleaseWaitService;
            _saveProjectChangesService = saveProjectChangesService;
        }
        public CsvTextEditorIsDirtyProjectWatcher(IProjectManager projectManager, IServiceLocator serviceLocator, IMainWindowTitleService mainWindowTitleService,
                                                  ISaveProjectChangesService saveProjectChangesService, IConfigurationService configurationService)
            : base(projectManager)
        {
            Argument.IsNotNull(() => serviceLocator);
            Argument.IsNotNull(() => mainWindowTitleService);
            Argument.IsNotNull(() => saveProjectChangesService);
            Argument.IsNotNull(() => configurationService);
            Argument.IsNotNull(() => projectManager);

            _projectManager            = projectManager;
            _serviceLocator            = serviceLocator;
            _mainWindowTitleService    = mainWindowTitleService;
            _saveProjectChangesService = saveProjectChangesService;
            _configurationService      = configurationService;

            _autoSaveTimer          = new DispatcherTimer();
            _autoSaveTimer.Tick    += AutoSaveIfNeeded;
            _autoSaveTimer.Interval = configurationService.GetRoamingValue(Configuration.AutoSaveInterval, Configuration.AutoSaveIntervalDefaultValue);
            _autoSaveTimer.Start();
        }