SettingsProviderAttribute替换应用程序级自定义SettingsProvider

Ada*_*dam 8 c# app-config application-settings settingsprovider

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

创建自定义设置提供程序以在应用程序之间共享设

创建自定义设置提供程序

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

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

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

dro*_*owa 5

您可以尝试以下代码.它基本上在构造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;
             }
         }
     }
}
Run Code Online (Sandbox Code Playgroud)