public void Handle(AppSettingsAddedOrUpdated @event) { using (var context = _contextFactory.Invoke()) { var settings = context.Query <AppSetting>().ToList(); var taxiHailSettings = new ServerTaxiHailSetting(); var defaultSettings = taxiHailSettings.GetType().GetAllProperties(); foreach (var appSetting in @event.AppSettings) { if (!defaultSettings.ContainsKey(appSetting.Key)) { // Setting doesn't exist continue; } var defaultSettingValue = taxiHailSettings.GetNestedPropertyValue(appSetting.Key); string defaultSettingStringValue; if (defaultSettings[appSetting.Key].PropertyType == typeof(bool?)) { // Support for nullabool defaultSettingStringValue = defaultSettingValue == null ? "null" : defaultSettingValue.ToString().ToLower(); } else { defaultSettingStringValue = defaultSettingValue == null ? string.Empty : defaultSettingValue.ToString(); } if (defaultSettingStringValue.IsBool()) { // Needed because ToString() returns False instead of false defaultSettingStringValue = defaultSettingStringValue.ToLower(); } var settingToUpdate = settings.FirstOrDefault(x => x.Key == appSetting.Key); if (settingToUpdate != null) { if (appSetting.Value != defaultSettingStringValue) { // Value is different than default settingToUpdate.Value = appSetting.Value; } else { // Value is the same as default, remove the setting context.Set <AppSetting>().Remove(settingToUpdate); } } else { if (appSetting.Value != defaultSettingStringValue) { // New setting with value different than default context.Set <AppSetting>().Add(new AppSetting(appSetting.Key, appSetting.Value)); } } } context.SaveChanges(); } // Refresh the ServerData object _serverSettings.Reload(); }
public object Get(ConfigurationResetRequest request) { _cacheClient.RemoveByPattern(string.Format("{0}*", ReferenceDataService.CacheKey)); _serverSettings.Reload(); return(true); }