Пример #1
0
        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;
            }
        }
Пример #2
0
 public bool IsLike(RegistryUrn registryUrn)
 {
     return WeakName.Equals(registryUrn.WeakName, StringComparison.OrdinalIgnoreCase);
 }
Пример #3
0
        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());
        }