Я нашел ответ, хотя и немного запутанный и требующий углубления в архитектуру .NET, которая недостаточно хорошо документирована. Несмотря на то, что ApplicationSettingsBase и IApplicationSettingsProvider не связаны между собой, для выполнения этой работы требуется некоторое повторное объединение. Решение включает в себя изменение настроек или вашей собственной индивидуальной версии, например:
[SettingsProvider(typeof(CustomSettingProviders.MySettingsProvider))]
internal sealed partial class Settings {
public Settings(string name)
{
this.Context.Add("Name", name);
}
В качестве альтернативы, вы можете обойти внесение изменений в этот класс, установив Context перед его использованием следующим образом:
settings.Context.Add("Name", "hello");
В настройках SetPropertyValues MySettingsProvider вы можете фактически получить данные и что-то с ними сделать:
public override void SetPropertyValues(SettingsContext context, SettingsPropertyValueCollection propvals)
{
if (context.Contains("Name"))
ApplicationName = context["Name"].ToString();
Чтобы использовать настройки, просто создайте экземпляр класса с помощью параметризованного конструктора или, альтернативно, установите Context перед его использованием:
var settings = new Properties.Settings("Hello") { Setting1 = "Hello, is anyone home!" }
// alternative: settings.Context.Add("Name", "hello");
settings.Save();