在应用程序之间共享设置

Posted

技术标签:

【中文标题】在应用程序之间共享设置【英文标题】:Sharing settings between applications 【发布时间】:2011-03-23 00:05:55 【问题描述】:

我有多个 .NET 程序集,它们都需要共享通用用户设置,例如首选项、用户名等。一个是 WPF 应用程序,另一个是控制台应用程序,第三个是 Office 插件。所有这些设置都是用户范围的。

只有 WPF 应用程序需要能够更改设置。其余的只是阅读它们。

理想情况下,我想使用 .NET 配置框架。我不确定如何做到这一点。如果我将设置添加到 WPF 应用程序,其他应用程序如何找到 user.config 文件?

创建类库并使用IsolatedFileStorage 和序列化我的设置是否更容易?

任何建议将不胜感激。

【问题讨论】:

【参考方案1】:

您可以实现自定义设置类,继承ApplicationSettingsBase。作为一个好的开始,您可以将默认用户设置文件添加到示例项目(右键单击项目 -> Properties -> Settings -> This project does not contain a default settings file. Click here to create one.)。添加用户范围的设置并研究设计器生成的 Settings.Designer.cs 文件的结构:

namespace ConsoleApplication1.Properties 


    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase 

        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

        public static Settings Default 
            get 
                return defaultInstance;
            
        

        [global::System.Configuration.UserScopedSettingAttribute()]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [global::System.Configuration.DefaultSettingValueAttribute("John Doe")]
        public string Name 
            get 
                return ((string)(this["Name"]));
            
            set 
                this["Name"] = value;
            
        
    

在您的自定义实现中,您将不限于设计器生成的访问修饰符,因此您可以使用内部设置器将 Settings 类实现为内部的,仅对所需的程序集可见,或者任何适合您的需求。

当然,您始终可以实现自定义的序列化/反序列化机制,但您将失去 ApplicationSettingsBase 的升级、重新加载和重置方法提供的功能。如果您不需要任何这些,这可能是更清洁的方法。

【讨论】:

【参考方案2】:

我建议您创建服务来提供和更新用户信息和/或偏好。这将是更好的架构、更简洁的解决方案,并且更易于维护和扩展。

【讨论】:

以上是关于在应用程序之间共享设置的主要内容,如果未能解决你的问题,请参考以下文章

C# 在应用程序之间共享实例

会话在选项卡之间共享

Android 应用程序:在手机之间共享简单数据

在两个应用程序之间共享 iCloud 键值

在烧瓶和其他应用程序之间共享 sqlalchemy 模型

在 Java 服务和本机应用程序之间共享缓冲区,访问开销最小