ApplicationSettingsBase运用

先建一个类继承于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);

 

posted @ 2015-08-12 10:43  终极程序猿  阅读(644)  评论(0编辑  收藏  举报