public void Dispose()
 {
     if (_hostingWatcher != null)
     {
         _hostingWatcher.Changed -= hostingWatcher_Changed;
         _hostingWatcher.Dispose();
         _hostingWatcher = null;
     }
     if (_settingsWatcher != null)
     {
         _settingsWatcher.Changed -= settingsWatcher;
         _settingsWatcher.Dispose();
         _settingsWatcher = null;
     }
     _changed = null;
 }
        private void hostingWatcher_Changed(FileSystemEventArgs e)
        {
            var content = File.ReadAllText(e.FullPath);

            Hosting = JsonConvert.DeserializeObject <Hosting>(content);

            if (Hosting == null)
            {
                throw new ArgumentException("Settings file invalid: " + e.FullPath);
            }

            if (_settingsWatcher != null)
            {
                _settingsWatcher.Dispose();
            }

            var settingsPath = Combine(_settingsFilePath);

            _settingsWatcher = new Mark.FileWatcher.FileWatcher(settingsPath);
            _settingsWatcher.AddChangedListener(settingsWatcher, true);
        }
        public SettingsContext(string settingsFileName = "app.json", string settingsPath = "settings")
        {
            if (string.IsNullOrWhiteSpace(settingsFileName))
            {
                throw new ArgumentNullException("filename");
            }

            if (string.IsNullOrWhiteSpace(settingsPath))
            {
                throw new ArgumentNullException("settingsPath");
            }

            _settingsFilePath = settingsFileName;

            if (Path.IsPathRooted(settingsPath))
            {
                _rootPath = settingsPath;
            }
            else
            {
                _rootPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, settingsPath);
            }

            var hostingPath = Path.Combine(_rootPath, "hosting.json");

            if (File.Exists(hostingPath))
            {
                _hostingWatcher = new FileWatcher.FileWatcher(hostingPath);
                _hostingWatcher.AddChangedListener(hostingWatcher_Changed, true);
            }
            else
            {
                Hosting = new Hosting();
                var settingsFilePath = Combine(_settingsFilePath);
                _settingsWatcher = new Mark.FileWatcher.FileWatcher(settingsFilePath);
                _settingsWatcher.AddChangedListener(settingsWatcher, true);
            }
        }