c# - 应用级自定义SettingsProvider的SettingsProviderAttribute替换

标签 c# app-config application-settings settingsprovider

在 .NET 应用程序中,如果您有特定的设置需求,例如将它们存储在数据库中,那么您可以将 LocalFileSettingsProvider 替换为您的自定义设置提供程序,示例:

Create a Custom Settings Provider to Share Settings Between Applications

Creating a Custom Settings Provider

要声明您要使用特定提供程序的设置类(继承 ApplicationSettingsBase 的类),您可以使用 SettingsProviderAttribute 对其进行修饰,并将您的提供程序类型作为参数[SettingsProvider(typeof(MyCustomProvider))],否则会使用默认的LocalFileSettingsProvider

我的问题:是否可以使用某种配置或技巧来强制我的应用程序在整个应用程序中使用我的自定义提供程序而不使用属性?

原因是我正在通过 MEF 加载插件,而插件可能是通过第 3 方编写的,我不希望他们关心如何处理设置。

最佳答案

您可以尝试以下代码。它基本上在 Settings 对象的构造期间将默认提供程序更改为任意提供程序。请注意,我从未测试过此代码。

internal sealed partial class Settings {

    public Settings() {

        SettingsProvider provider = CreateAnArbitraryProviderHere();

        // Try to re-use an existing provider, since we cannot have multiple providers
        // with same name.
        if (Providers[provider.Name] == null)
            Providers.Add(provider);
         else
            provider = Providers[provider.Name];

        // Change default provider.
        foreach (SettingsProperty property in Properties)
        {
            if (
                property.PropertyType.GetCustomAttributes(
                    typeof(SettingsProviderAttribute),
                    false
                ).Length == 0
             )
             {
                 property.Provider = provider;
             }
         }
     }
}

关于c# - 应用级自定义SettingsProvider的SettingsProviderAttribute替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12397351/

相关文章:

c# - 避免在目录中一次更改太多错误

c# - 无法从 App.config 读取 key

c# - 类库的 app.config 中的绑定(bind)重定向有什么作用吗?

java - Spring Boot @RestController 使用属性启用/禁用方法

c# - 从 Biztalk 调用 wcf 服务时出现 System.TimeoutException

c# - 在 WPF 项目中,如何初始化窗口和控件,然后跳转到主循环?

javascript - 应用程序设置将存储到漫游数据存储中

c# - 如何从控制台应用程序中访问 Properties 命名空间?

c# - 在 MasterPage 中使用 javascript 验证文本框

.net - 通过反射加载程序集和访问配置时出现问题