前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.Net WinForm程序如何方便的读取和存储用户和系统个性化配置数据?

.Net WinForm程序如何方便的读取和存储用户和系统个性化配置数据?

作者头像
程序你好
发布2018-07-20 10:11:24
7940
发布2018-07-20 10:11:24
举报
文章被收录于专栏:程序你好程序你好

桌面应用程序经常需要把一些配置信息存到本地,包括应用程序的配置(基于应用的全局配置)和用户(基于登陆用户的个性化配置)的配置。这里介绍一个开源的配置库项目。SettingsProvider.net是在GitHub上的一款参数配置组件,能够基于普通配置文件、ProgramData目录文件、独立存储区文件等方式的配置文件存储,它主要是基于Json格式进行的配置保存到硬盘文件里。

SettingHelper代码:

代码语言:javascript
复制
public static class SettingHelper
    {
        private static SettingsProvider _provider;

        public static string SecretKey { get; set; }

        public static string AppDataFolder { get; set; }

        public static SettingsProvider Provider
        {
            get { return _provider ?? (_provider = CreateSettingProvider()); }
        }

        private static SettingsProvider CreateSettingProvider()
        {
            if(string.IsNullOrEmpty(AppDataFolder))
            {
                return new SettingsProvider(new PortableStorage("Data"),SecretKey);
            }

            return new SettingsProvider(new RoamingAppDataStorage(AppDataFolder), SecretKey);
        }

        /// <summary>
        /// 保存配置
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="settingsToSave"></param>
        public static void Save<T>(T settingsToSave)
        {
            Provider.SaveSettings(settingsToSave);
          
        }
        /// <summary>
        /// 按指定的文件名保存配置
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="settingsToSave"></param>
        /// <param name="fileName"></param>
        public static void Save<T>(T settingsToSave,string fileName)
        {
            Provider.SaveSettings(fileName, settingsToSave);
        }

        /// <summary>
        /// 按指定的文件名装置配置
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static T Load<T>(string fileName) where T : new()
        {
            return Provider.GetSettings<T>(fileName);
        }

        /// <summary>
        /// 获取配置
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="fresh">是否刷新缓存</param>
        /// <returns></returns>

        public static T Load<T>(bool fresh = false)  where T : new()
        {
            return Provider.GetSettings<T>(fresh);
        }

        public static T ResetToDefaults<T>() where T : new()
        {
            return Provider.ResetToDefaults<T>();
        }

        public static IEnumerable<ISettingDescriptor> ReadSettingMetadata<T>()
        {
            return Provider.ReadSettingMetadata<T>();

        }

        public static IEnumerable<ISettingDescriptor> ReadSettingMetadata(Type settingsType)
        {
            return Provider.ReadSettingMetadata(settingsType);

        }
    }

定义Application配置的文件AppContext:

代码语言:javascript
复制
            public class AppContext : IAppContext        
            {    
                private AppSetting settings = new AppSetting();
                private UserSetting userSetting;
                private Dictionary<string, string> dictionaryResources;
                private IList<string> cachedDictionaryList;
                private Dictionary<string, IList<string>> viewModelcodingSettings;
        
                private static AppContext context;
                public static AppContext Context
                {
                    get { return context ?? (context = new AppContext()); }
                }
        
                public UserProfile CurrentUser { get; set; }
                public WorkingWell CurrentWell { get; set; }

定义用户配置文件类:

代码语言:javascript
复制
 public class UserSetting
    {
        private Dictionary<string, ViewState> _viewStates;
        private Dictionary<string, string> activeViews;

        public Dictionary<string, string> ActiveViews
        {
            get
            {
                if(activeViews == null)
                {
                    activeViews = new Dictionary<string, string>();
                }

                return activeViews;
            }
            set { activeViews = value; }
        }

        public Dictionary<string, ViewState> ViewStates
        {
            get 
            {
                return _viewStates ?? new Dictionary<string,ViewState>();
            }
            set { _viewStates = value; }
        }
        public string UserId { get; set; }
       
        /// <summary>
        /// 列表导出数据保存路径
        /// </summary>
        public string LastExportSavedPath { get; set; }
        public string LastImportPath { get; set; }

        /// <summary>
        /// 增加一个用户视图状态
        /// </summary>
        /// <param name="key"></param>
        /// <param name="viewState"></param>
        public void AddViewState(string key,ViewState viewState)
        {
             if(ViewStates.ContainsKey(key))
             {
                 ViewStates[key] = viewState;
                 return;
             }

             ViewStates.Add(key, viewState);
        }

        /// <summary>
        /// 获取用户视图状态对象
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public ViewState GetViewState(string key)
        {
            if(ViewStates.ContainsKey(key))
            {
                return ViewStates[key];
            }

            var viewState = new ViewState();
            ViewStates.Add(key, viewState);
            return viewState;
        }

        public bool ContainsKey(string key)
        {
            return ViewStates.ContainsKey(key);
        }
    }

保存用户和应用的配置信息

public static void SaveUserSetting()

{

if (AppContext.Context.CurrentUser != null && AppContext.Context.CurrentUser.UserName != null)

{

SettingHelper.Save(AppContext.Context.UserSetting, AppContext.Context.CurrentUser.UserName);

AppContext.Context.AppSetting.UserAccount = AppContext.Context.CurrentUser.UserName;

}

}

public static void SaveSettings()

{

SaveUserSetting();

SettingHelper.Save(AppContext.Context.AppSetting);

//SettingHelper.Save(AppContext.Context.DataInputRules);

}

获取用户配置信息:

代码语言:javascript
复制
 private static void LoadCurrentUserSettings()
        {

            var userSetting = SettingHelper.Load<UserSetting>(AppContext.Context.CurrentUser.UserName);
            if(userSetting.ViewStates == null)
            {
                userSetting = LoadDefaultUserSetting();
            }

            AppContext.Context.UserSetting = userSetting;

        }

        private static UserSetting LoadDefaultUserSetting()
        {
            return SettingHelper.Load<UserSetting>("defaultUser"); ;
        }

程序运行之后,会在当前目录里生产配置文件。

admin文件是用户名是admin的用户的配置,appsetting文件是应用程序的配置文件,配置文件是以json的形式存储。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序你好 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档