gpt4 book ai didi

.net - 有没有方法可以覆盖ConfigurationManager.AppSettings?

转载 作者:行者123 更新时间:2023-12-03 11:41:15 37 4
gpt4 key购买 nike

我真的很希望能够有一种方法来获取当前使用 ConfigurationManager.AppSettings [“mysettingkey”] 来获取其设置的应用程序,以使这些设置实际上来自中央数据库而不是来自app.config文件。我可以创建一个自定义配置部分来处理这种事情,但我确实不希望团队中的其他开发人员不得不更改其代码以使用新的DbConfiguration自定义部分。我只是希望他们能够以他们始终拥有的方式调用AppSettings,但是可以从中央数据库中加载它。

有任何想法吗?

最佳答案

如果您不介意围绕框架进行黑客攻击,并且可以合理地假定应用程序正在运行的.net框架版本(即,它是Web应用程序或Intranet应用程序),则可以尝试执行以下操作:

using System;
using System.Collections.Specialized;
using System.Configuration;
using System.Configuration.Internal;
using System.Reflection;

static class ConfigOverrideTest
{
sealed class ConfigProxy:IInternalConfigSystem
{
readonly IInternalConfigSystem baseconf;

public ConfigProxy(IInternalConfigSystem baseconf)
{
this.baseconf = baseconf;
}

object appsettings;
public object GetSection(string configKey)
{
if(configKey == "appSettings" && this.appsettings != null) return this.appsettings;
object o = baseconf.GetSection(configKey);
if(configKey == "appSettings" && o is NameValueCollection)
{
// create a new collection because the underlying collection is read-only
var cfg = new NameValueCollection((NameValueCollection)o);
// add or replace your settings
cfg["test"] = "Hello world";
o = this.appsettings = cfg;
}
return o;
}

public void RefreshConfig(string sectionName)
{
if(sectionName == "appSettings") appsettings = null;
baseconf.RefreshConfig(sectionName);
}

public bool SupportsUserConfig
{
get { return baseconf.SupportsUserConfig; }
}
}

static void Main()
{
// initialize the ConfigurationManager
object o = ConfigurationManager.AppSettings;
// hack your proxy IInternalConfigSystem into the ConfigurationManager
FieldInfo s_configSystem = typeof(ConfigurationManager).GetField("s_configSystem", BindingFlags.Static | BindingFlags.NonPublic);
s_configSystem.SetValue(null, new ConfigProxy((IInternalConfigSystem)s_configSystem.GetValue(null)));
// test it
Console.WriteLine(ConfigurationManager.AppSettings["test"] == "Hello world" ? "Success!" : "Failure!");
}
}

关于.net - 有没有方法可以覆盖ConfigurationManager.AppSettings?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/158783/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com