[本地存储值]ApplicationSettingsBase运用

Posted liangyuwen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[本地存储值]ApplicationSettingsBase运用相关的知识,希望对你有一定的参考价值。

using System;
using System.ComponentModel;

namespace Concert.Configuration
{

    public sealed class UserSettings : System.Configuration.ApplicationSettingsBase, Concert.Configuration.IUserSettings
    {

        private static readonly bool ThrowOnErrorDeserializing = false, ThrowOnErrorSerializing = false;
        private static IUserSettings defaultInstance = ((UserSettings)System.Configuration.ApplicationSettingsBase.Synchronized(new UserSettings()));
        private static readonly System.Configuration.SettingsAttributeDictionary SettingsAttributes = new System.Configuration.SettingsAttributeDictionary() {
            {typeof(System.Configuration.UserScopedSettingAttribute), new System.Configuration.UserScopedSettingAttribute()}
        };

        private System.Configuration.SettingsProvider provider;

        private UserSettings()
        {
        }

        public static IUserSettings Instance
        {
            get
            {
                return defaultInstance;
            }
        }

        public void Register<T>(string name, T defaultValue)
        {
            if (name == null || name.Trim().Length == 0)
                throw new ArgumentNullException("name");
            var property = this.Properties[name];
            if (property == null)
                this.CreateSettingsProperty(name, typeof(T), defaultValue);
        }

        public bool Contains(string name)
        {
            if (name == null || name.Trim().Length == 0)
                throw new ArgumentNullException("name");
            var property = this.Properties[name];
            return property != null;
        }

        public void Set<T>(string name, T value)
        {
            if (this.Contains(name) == false)
                this.Register<T>(name, value);
            this[name] = value;
        }

        public T Get<T>(string name, T defaultValue)
        {
            if (name == null || name.Trim().Length == 0)
                throw new ArgumentNullException("name");
            if (this.Contains(name))
            {
                return (T)(this[name] ?? defaultValue);
            }
            else
            {
                this.CreateSettingsProperty(name, typeof(T), defaultValue);
                var val = this[name];
                //if(val == null) this.Remove(name);                
                return (T)(val ?? defaultValue);
            }
        }

        public void Remove(string name)
        {
            if (name == null || name.Trim().Length == 0)
                throw new ArgumentNullException("name");
            //var property = this.Properties[key];
            //if (property != null)
            this.PropertyValues.Remove(name);
            this.Properties.Remove(name);
        }

        private void CreateSettingsProperty(string name, Type propertyType, object defaultValue)
        {
            var property = new System.Configuration.SettingsProperty(name, propertyType, this.Provider, false, defaultValue,
                this.GetSerializeAs(propertyType), SettingsAttributes, ThrowOnErrorDeserializing, ThrowOnErrorSerializing);
            this.Properties.Add(property);
        }

        private System.Configuration.SettingsSerializeAs GetSerializeAs(Type type)
        {
            TypeConverter converter = TypeDescriptor.GetConverter(type);
            bool flag = converter.CanConvertTo(typeof(string));
            bool flag2 = converter.CanConvertFrom(typeof(string));
            if (flag && flag2)
            {
                return System.Configuration.SettingsSerializeAs.String;
            }
            return System.Configuration.SettingsSerializeAs.Xml;
        }

        private System.Configuration.SettingsProvider Provider
        {
            get
            {
                if (this.provider == null && (this.provider = this.Providers["LocalFileSettingsProvider"]) == null)
                {
                    this.provider = new System.Configuration.LocalFileSettingsProvider();
                    this.provider.Initialize(null, null);
                    this.Providers.Add(this.provider);
                }
                return this.provider;
            }
        }

    }

}

UserSettings
using System.ComponentModel;
namespace Concert.Configuration
{
    public interface IUserSettings : INotifyPropertyChanged
    {
        void Register<T>(string name, T defaultValue);
        bool Contains(string name);
        //object Get(string name, object defaultValue);
        T Get<T>(string name, T defaultValue);
        void Set<T>(string name, T value);

        void Reload();
        void Save();
        void Upgrade();

    }
}

IUserSettings

存储值到本地,值将会被保存到系统盘个人文件夹目录里

UserSettings.Instance.Set<int>("TestValue", 23456);
UserSettings.Instance.Save();

 

获取已经存储的值

UserSettings.Instance.Get<int>("TestValue", 0);

以上是关于[本地存储值]ApplicationSettingsBase运用的主要内容,如果未能解决你的问题,请参考以下文章

本地存储不存储值。仅存储 [object MouseEvent]

本地存储只存储一个值/键。我如何存储大量?

使用本地存储保存和加载输入值?

如何在 C# 代码中从本地存储中检索值?

HTML5 本地存储 - 我可以为每个键存储多个值,如果不能,我可以使用啥替代方案?

Android - 如何在 WebView 中访问本地存储值?