public override IEnumerable<Setting> GetSettings(Setting setting) { var registryPath = new RegistryUrn(setting.Name); var subKeyName = Path.Combine(_baseSubKeyName, registryPath.Namespace); using (var subKey = _baseKey.OpenSubKey(subKeyName, false)) { if (subKey == null) { throw new OpenOrCreateSubKeyException(_baseKey.Name, _baseSubKeyName, subKeyName); } var settings = subKey.GetValueNames() .Where(valueName => RegistryUrn.Parse(valueName).IsLike(registryPath.WeakFullName)) .Select(valueName => new Setting { Name = SettingUrn.Parse(valueName), Value = subKey.GetValue(valueName) }) .ToList(); return settings; } }
public bool IsLike(RegistryUrn registryUrn) { return WeakName.Equals(registryUrn.WeakName, StringComparison.OrdinalIgnoreCase); }
public override int SaveSettings(IEnumerable<Setting> settings) { var groups = settings.GroupBy(x => x.Name.WeakFullName).ToList(); foreach (var group in groups) { var groupDeleted = false; foreach (var setting in group) { var registryValueKind = RegistryValueKind.None; if (!_registryValueKinds.TryGetValue(setting.Value.GetType(), out registryValueKind)) { throw new InvalidTypeException(setting.Value.GetType(), SupportedTypes); } var subKeyName = Path.Combine(_baseSubKeyName, setting.Name.Namespace); using (var subKey = _baseKey.OpenSubKey(subKeyName, true) ?? _baseKey.CreateSubKey(subKeyName)) { if (subKey == null) { throw new OpenOrCreateSubKeyException(_baseKey.Name, _baseSubKeyName, subKeyName); } if (!groupDeleted) { var valueNames = subKey .GetValueNames() .Where(x => RegistryUrn.Parse(x).IsLike(setting.Name)) .ToList(); foreach (var valueName in valueNames) { #if !DISABLE_DELETE_VALUE subKey.DeleteValue(valueName); #endif } groupDeleted = true; } var registryUrn = new RegistryUrn(setting.Name); #if !DISABLE_SET_VALUE subKey.SetValue(registryUrn.StrongName, setting.Value, registryValueKind); #endif } } } return groups.Sum(x => x.Count()); }