在 .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/