C# 设置提供应用程序级自定义设置提供程序的属性替换

C# 设置提供应用程序级自定义设置提供程序的属性替换,c#,app-config,application-settings,settingsprovider,C#,App Config,Application Settings,Settingsprovider,在.NET应用程序中,如果您有特定的设置需要,例如将它们存储在DB中,则可以使用您的自定义设置提供程序替换LocalFileSettingsProvider,例如: 要声明要使用特定提供程序的设置类(继承ApplicationSettingsBase),请使用SettingsProviderAttribute对其进行修饰,并将提供程序类型作为参数传递[SettingsProvider(typeof(MyCustomProvider))],否则,它将使用默认的LocalFileSettings

在.NET应用程序中,如果您有特定的设置需要,例如将它们存储在DB中,则可以使用您的自定义设置提供程序替换
LocalFileSettingsProvider
,例如:

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

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


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

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

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;
             }
         }
     }
}

这是可行的,但有一行需要更新-->provider=provider[provider.Name]作为ArbitraySettingsProvider;SettingsProvider似乎没有“Name”属性。。。?啊,我的程序集中缺少对System.Configuration的引用