SettingsProvider Замена атрибута для пользовательских настроек уровня приложения
В приложении.NET, если у вас есть конкретные настройки, такие как сохранение их в БД, вы можете заменить LocalFileSettingsProvider
с вашим поставщиком пользовательских настроек, примеры:
Создание провайдера пользовательских настроек для обмена настройками между приложениями
Создание провайдера пользовательских настроек
Чтобы объявить класс настроек (тот, который наследует ApplicationSettingsBase
) что вы хотите использовать конкретный провайдер, вы украшаете его SettingsProviderAttribute
и передайте тип вашего провайдера в качестве параметра [SettingsProvider(typeof(MyCustomProvider))]
в противном случае будет использоваться значение по умолчанию LocalFileSettingsProvider
,
Мой вопрос: есть ли какая-либо конфигурация или хитрость, которую я мог бы использовать, чтобы заставить мое приложение использовать мой пользовательский провайдер через приложение без использования атрибута?
Причина в том, что я загружаю плагины через MEF, а плагины могут быть написаны сторонними разработчиками, и я не хочу, чтобы они беспокоились о том, как работают настройки.
1 ответ
Вы можете попробовать следующий код. Он в основном меняет поставщика по умолчанию на произвольного при создании объекта 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;
}
}
}
}