In a .NET application, if you have specific Settings need, such as storing them in DB, then you could replace LocalFileSettingsProvider
with a custom settings provider of your, examples:
Create a Custom Settings Provider to Share Settings Between Applications
Creating a Custom Settings Provider
To declare the settings class (the one that inherits ApplicationSettingsBase
) that you want to use a specific provider, you decorate it with SettingsProviderAttribute
and pass your provider type as a parameter [SettingsProvider(typeof(MyCustomProvider))]
, otherwise it will use the default LocalFileSettingsProvider
.
My question: Is there a configuration or a trick I could use to force my application to use my custom provider through-out the application without using an attribute?
The reason is that I am loading plugins via MEF and the plugins might be written via 3rd party and I don't want them to be concerned with how settings are being dealt with.
You could try the following code. It basically changes the default provider to an arbitrary one during the construction of the Settings object. Note that I never tested this code.
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;
}
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With