/// <summary> /// Monitor initializes application by reading configuration, parsing it and initializing child-components. /// </summary> public MonitorAgent() { // Get path to the configuration file using settings in app.config. // Standard configuration is used only to get the path to our custom configuration. string configurationFilePath = System.Configuration.ConfigurationManager.AppSettings[CONFIGURATION_SETTING_KEY]; // Throw exception if cannot get information about xml configuration file. if (String.IsNullOrEmpty(configurationFilePath)) { throw new ArgumentException("Could not find setting with path to ther configuration file. " +"Please check your config file contains key \""+ CONFIGURATION_SETTING_KEY+"\" and that key is set properly"); } Console.WriteLine("Initializing configuration at root level..."); // Use static method of SConfigManager class to read configuration from the file. string configurationXml = SConfigManager.ReadConfigFromFile(configurationFilePath); // Initialize SConfigManager using configuration string. _configuration = new SConfigManager(configurationXml); Console.WriteLine("Initialized." + System.Environment.NewLine); Console.WriteLine("Initializing logger..."); // Initialize logger by passing child of root configuration into its constructor. logger = new Logger(_configuration.Children["Logger"]); logger.Log("Logger initialised."); Console.WriteLine("Logger initialized." + System.Environment.NewLine); // DirectoryWatchers if (_configuration.Children.ContainsKey("Watchers")) { // Iterate Children of "Watchers" child of root configuration foreach (KeyValuePair<string, SConfigManager> element in _configuration.Children["Watchers"].Children) { SConfigManager config = (SConfigManager)element.Value; // Initialize new directoryWatcher by passing configuration into its constructor. Console.WriteLine("Initializing DirectoryWatcher: " +config.Name + "..."); DirectoryWatcher directoryWatcher = new DirectoryWatcher(config); directoryWatcher.LogHandler += new LogEventHandler(OnAction); Console.WriteLine("DirectoryWatcher initialized: " + config.Name + "..." + System.Environment.NewLine); // Add new directoryWatcher to the list of directoryWatchers _directoryWatchers.Add(directoryWatcher); } } Console.WriteLine("Watchers are now listening for any changes in watched directories."+ "Make any action, like create or rename a file in those directories to see its working." + System.Environment.NewLine); }