我有一个静态类,它在每次需要建立连接时加载我的连接字符串的值。这样做是为了确保在更改时使用最新的连接字符串。但它适用于在 IIS 中托管的网站,因此只要 web.config 发生更改,网站就会重新启动。
因此连接字符串也可以静态加载:
using System.Configuration;
public static class Settings
{
static Settings()
{
Database = ConfigurationManager.ConnectionStrings["database"].ConnectionString;
Timeout = ConfigurationManager.AppSettings["timeout"];
}
public static string Database { get; }
public static string Timeout { get; }
}
这是否允许在部署后更改 IIS 站点的数据库连接?
对于 Windows 服务?
编辑:显然这个问题的表述不当。我知道如何确保重新加载配置值,问题是这个特定设置是否可以完成这项工作。这是一个是/否问题。
我知道如何做到这一点,所以每次都会读取该属性。我关心的是性能。每次读取文件都很昂贵。我宁愿只访问一个静态属性。考虑到保存 web.config 将重新启动网站,因此无论如何都会读取文件;我的代码也不需要这样做。所以更具体的问题是:
保存 web.config 是否会触发我的静态构造函数,从而重新加载配置值?
另一个编辑:也更改了顶部的问题。
最佳答案
从 C# 6.0 开始,您可以使用 expression bodied readonly properties ,所以你的类可以这样写:
使用系统配置;
public static class Settings
{
public static string Database => ConfigurationManager.ConnectionStrings["database"].ConnectionString;
public static string Timeout => ConfigurationManager.AppSettings["timeout"];
}
表达式主体属性将在每次访问时执行表达式,因此如果配置文件发生更改,您甚至不需要重新启动服务。
进一步阅读:This SO post和 one it's linked to .
关于c# - 更改 web.config 会导致 IIS 网站刷新,是否还会再次触发运行静态构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56793814/