我找到了一个答案,尽管有点令人费解,并且需要深入研究 .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");
在 MySettingsProvider 的设置 SetPropertyValues 中,您实际上可以抓取数据并对其进行处理:
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();