public static ChoConfigurationMetaDataState Register(string configSectionName, string metaDataFileName)
        {
            ChoGuard.ArgumentNotNullOrEmpty(configSectionName, "ConfigSectionName");
            ChoGuard.ArgumentNotNullOrEmpty(metaDataFileName, "MetaDataFileName");

            lock (_configMetaData.SyncRoot)
            {
                if (_configMetaData.ContainsKey(configSectionName))
                {
                    _configMetaData.Remove(configSectionName);
                }

                ChoConfigurationMetaDataState configurationMetaDataState = new ChoConfigurationMetaDataState();
                _configMetaData.Add(configSectionName, configurationMetaDataState);

                configurationMetaDataState.ConfigSectionName        = configSectionName;
                configurationMetaDataState.MetaDataFileName         = metaDataFileName;
                configurationMetaDataState.FileWatcher              = new ChoFileWatcher(metaDataFileName);
                configurationMetaDataState.FileWatcher.FileChanged += (target, e) => configurationMetaDataState.OnConfigurationMetaDataChanged();

                configurationMetaDataState.FileWatcher.StartWatching();

                return(configurationMetaDataState);
            }
        }
 public static void Unregister(ChoConfigurationMetaDataState configurationMetaDataState)
 {
     ChoGuard.ArgumentNotNull(configurationMetaDataState, "ConfigurationMetaDataState");
     Unregister(configurationMetaDataState.ConfigSectionName);
 }