gpt4 book ai didi

asp.net - 在哪里存储应用程序设置?

转载 作者:行者123 更新时间:2023-12-04 08:59:06 25 4
gpt4 key购买 nike

最近,我发现“Web.Config”文件包含一个 <appSettings>部分似乎适合存储一个人的应用程序设置。哎呀,它甚至具有通过标准系统库访问文件的编程方式。所以很聪明,我写了一个接口(interface)来访问它,然后是接口(interface)的具体实现,如下所示:

public interface IAppSettings
{
IEnumerable<string> GetValues(string componentName, string settingName);
IEnumerable<KeyValuePair<string, string>> GetValuePairs(string componentName, string settingName);
void SetValues(string componentName, string settingName, IEnumerable<string> valueList, bool append);
void SetValuePairs(string componentName, string settingName, IEnumerable<KeyValuePair<string, string>> pairList, bool append);
}

后来才发现 saving settings back to "web.config" while the application is running causes the entire application to re-start .这对我来说似乎完全不合理,因为如果我经常写回 web.config 并且应用程序每次都重新启动,那么 HttpRuntime.Cache 之类的东西就会被完全清空,从而使我的 Cache 无用,因为它一直在清空和重新填充。

所以我想知道:我应该在哪里存储我的应用程序设置?

有没有一个好的解决方案,这样我就不必自己动手了?

编辑:

好的,感谢所有建议使用数据库和潜在表模式的人。我想我将使用以下架构:
settings:
index NUMBER NOT NULL AUTO_INCREMENT <== Primary Key
component NVARCHAR(255) NOT NULL
setting NVARCHAR(255) NOT NULL
key NVARCHAR(255)
value NVARCHAR(255) NOT NULL

虽然我不认为我会“设置” P-Key,但使用 Auto-Incr Index 代替。这样,如果我有一个应用程序需要将一些东西邮寄给多个经理,我可以存储很多:
index     component       setting        value
1 RequestModule ManagerEmail manager1@someplace
2 RequestModule ManagerEmail manager2@someplace

然后我可以使用:
IEnumerable<string> GetValues(string componentName, string settingName);

它将返回一个电子邮件地址列表,而不仅仅是一个值。

这有意义吗?

最佳答案

web.config 通常用于只读设置,即。系统管理员在部署应用程序期间设置的设置。

如果要读写设置,最明显的方法是使用数据库。顺便说一句,这有一个优势:一个应用程序可以托管在多个服务器上,并且仍然可以正确读取和写入设置,

您还可以为设置实现自定义存储,但实现起来可能会更困难,而且速度不会快很多。

要回答您的第二个问题,数据库的结构取决于您要存储的设置类型。

如果您需要存储异构的唯一条目像这样:

  • 管理员邮件地址,
  • 网站主页上显示的最大条目数,
  • 在“关于我们”页面上显示的文字,
  • bool 值,指示是否启用公共(public)评论,

  • 那么你必须使用 varchar s 或其他或多或少友好的类型作为标识条目的键(而不是通过它们的索引来引用它们)。

    另一方面,如果您的目的是 存储多个经理的邮件地址 ,您应该创建一个 Manager包含他们的邮件地址、姓名、上次连接的日期时间等的表格。

    你真的不应该把两者混在一起 .理论上,您可以通过组件/设置对来引用设置中的条目。在实践中,它使事情变得更加困难并产生了一堆问题:
  • 此外,如果您需要为每位经理存储一个 bool 值,指示她/他是否希望接收来自您的警报,该怎么办?以您目前的结构,这是不可能的。
  • 由于相同的设置可以有多个值,您打算如何处理必须唯一的设置?例如,“关于我们”页面上只能显示一个文本值。如果数据库中存储了两个值怎么办?
  • 关于asp.net - 在哪里存储应用程序设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3978882/

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