private static void InitInternal() { try { if (_validationResult == null) { _validationResult = new List <ValidationResult>(); } var section = ConfigurationSectionBase.GetSection <ExceptionNotificationSettingsSection>("exceptionNotificationSettingsSection"); if (section == null) { return; } _emailMessage = new EmailMessage(); _settings = new Dictionary <string, ExceptionNotificationSettings>(); var types = ReflectionHelper.GetAllTypes(t => typeof(Exception).IsAssignableFrom(t)) .Distinct(new TypeComparer()); PopulateEmaiMessage(section.EmailConfiguration); var timer = new Stopwatch(); //ToDo: review //LoggerManager.WriteInformationToEventLog("Loading all exceptions..."); timer.Start(); var dict = types.ToDictionary(k => k.FullName); timer.Stop(); //ToDo: review //LoggerManager.WriteInformationToEventLog(string.Format("Loading all exceptions took {0}", timer.Elapsed)); foreach (ExceptionNotificationSettingsConfigurationElement setting in section.ExceptionNotificationSettings) { if (!dict.ContainsKey(setting.Name) || _settings.ContainsKey(setting.Name)) { continue; } double minutes; if (!ReflectionHelper.TryParseOrDefault <double>(setting.TimeSpan, out minutes)) { _validationResult.Add(new ValidationResult(string.Format("Configuration setting TimeSpan for {0} is not numerical. Value is {1}.", setting.Name, setting.TimeSpan))); //ToDo: review //LoggerManager.WriteWarningToEventLog(string.Format("Configuration setting TimeSpan for {0} is not numerical. Value is {1}.", setting.Name, setting.TimeSpan)); continue; } var newSettings = new ExceptionNotificationSettings { NotificationEntryType = dict[setting.Name], TimeSpan = TimeSpan.FromMinutes(minutes), To = setting.OverrideRecipients.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries) }; if (!IsSettingsValid(newSettings, _validationResult)) { continue; } _settings[setting.Name] = newSettings; } } catch (Exception ex) { _error = ex; //ToDo: review //LoggerManager.WriteExceptionToEventLog(ex); } finally { _isValid = _error == null && _validationResult.Count == 0; } }
private static bool IsSettingsValid(ExceptionNotificationSettings settings, IList <ValidationResult> validationResult) { return(Validator.TryValidateObject(settings, new ValidationContext(settings, null), validationResult)); }