gpt4 book ai didi

asp.net - Web.config 和 App.config 的问题

转载 作者:行者123 更新时间:2023-12-02 16:23:51 26 4
gpt4 key购买 nike

简介:

  • 通常我们存储 ConnectionStrings以及 <appSettings> <add key... 中的一些其他设置 ( Web.config )或App.config

我的风景:

  • 使用工厂模式的Web应用程序直接注入(inject)读取数据提供商。

  • web.config我有 key 它告诉我哪个 DLL(提供者)我会用它来检索我的数据吗?

  • 我可以拥有多个提供商(每个 DLL 将是 MS 的提供者SQL、MySQL,或从以下位置获取数据一些 SOA 服务)。

  • 每个 DLL 都有自己的名称(ID 和命名空间),并且需要有自己的名称配置(数据连接,服务网址等...),第一个想法是然后写在 app.config .

问题:

  • #1 - 网站正在运行(运行时),我需要更改数据提供程序,我该如何执行此操作? 不知怎的,默认值写入Web.config将会改变。

    • 我的目标是能够拥有多个提供程序(以及在运行时:添加/删除提供程序并更改配置) - 这导致了我的第二个问题:

    .

  • #2 - 每个数据提供程序都有自定义配置,并且 App.Config 文件不能与 dll 程序集一起使用,只能与可执行文件一起使用。这意味着我需要在我的 Web.Config 上写入(我不喜欢这个选项,因为我再次在运行时更新我的​​ web.config)。 我该如何解决这个问题?

    • 我试图避免编写自定义设置 XML 文件。我理想的解决方案是以某种方式部署 DLLDLL.config每个提供商。在运行时,我可能需要再次更改此配置值。

.

最佳答案

好吧,伙计们,当我在等待一些帮助时,我开始努力工作,并且找到了一个很好的解决方案(当然,在我看来:P)。

让我与您分享:

因此,我有一个 Web 应用程序、一个控制台应用程序或某种其他类型的应用程序,以及许多类库,并且我需要存储在运行时会发生变化的信息(每个 Visual Studio 项目不同)。

将此信息存储在 Web.configApp.config 中对于解决许多问题来说并不是一个好主意。

我认为的另一种方式是每个项目有一个 XML 配置文件。

每个应用程序都会读取自己的 XML 并将其添加到具有 CacheDependency 的缓存中(当 XML 配置文件更新时,该缓存将过期)。这样我们就不需要一直读取配置,并且我们也知道配置什么时候发生改变。

IMO 这是解决问题最快、最简单的方法,无需使用第 3 方框架(也不需要时间来学习/编程)。

.

示例代码:

    protected void Page_Load(object sender, EventArgs e)
{
DBConfiguration cachConf;
cachConf = Cache["cachConf"] as DBConfiguration;
if (cachConf == null)
{
cachConf = new DBConfiguration();

XmlDocument doc = new XmlDocument();
doc.Load(HttpContext.Current.Request.PhysicalApplicationPath + "bin/MyConf.xml");
XmlNodeList xnl = doc.GetElementsByTagName("username");
XmlElement xe = (XmlElement)xnl[0];
cachConf.Username = xe.InnerText.ToString();
xnl = doc.GetElementsByTagName("password");
xe = (XmlElement)xnl[0];
cachConf.Password = xe.InnerText.ToString();

Cache.Insert("cachConf", cachConf,
new System.Web.Caching.CacheDependency(
HttpContext.Current.Request.PhysicalApplicationPath + "MyConf.xml"),
DateTime.Now.AddMinutes(60), TimeSpan.Zero,
System.Web.Caching.CacheItemPriority.Default,
new System.Web.Caching.CacheItemRemovedCallback(
CacheItemRemovedCallBack));
}
LabelUsername.Text = cachConf.Username;
LabelPassword.Text = cachConf.Password;
}

private void CacheItemRemovedCallBack(string key, object value, CacheItemRemovedReason reason)
{
//Response.Write("Hello world");
}

关于asp.net - Web.config 和 App.config 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1380352/

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