9

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

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

创建自定义设置提供程序

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

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

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

4

1 回答 1

8

你可以试试下面的代码。它基本上在设置对象的构造过程中将默认提供者更改为任意提供者。请注意,我从未测试过此代码。

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;
             }
         }
     }
}
于 2012-12-10T18:58:34.417 回答