【发布时间】:2012-05-04 05:04:16
【问题描述】:
我正在处理的 Web 应用程序中有一个包含客户端设置的类。对于某些背景,我不拥有这个类,并且改变它不是一种选择。我们最近添加了一些逻辑来将设置存储在数据库中,我的任务是创建一个页面来编辑它们,这很公平。
这是我的问题;这些设置保存在一个静态类中,它们本身就是静态的只读属性。例如
public static class Settings
{
public static readonly setting1 = SettingmanagerClass.GetSetting("setting1");
public static readonly setting2 = SettingmanagerClass.GetSetting("setting2");
public static readonly setting3 = SettingmanagerClass.GetSetting("setting3");
}
现在,比如通过我写的页面,我们将setting2的值改为“Happy Variable”;它可以很好地保存到数据库中,但现在我需要将它作为新值反映在 Web 应用程序中。由于它是静态类的静态只读属性,因此只有在应用首次连接时才会调用它,并且无法手动设置。
重申一下,我不拥有原始类,因此“仅使属性可写”不是(当前)有效的选项。通常我会和我的老板讨论这个问题,他会做出判断,并可能允许我修改另一个班级,但我无法做出那个决定,而且他这周都不在办公室。
基本上是这样;一旦 Web 应用程序开始运行,有没有办法重新初始化静态类?我只需要让它重新加载它的所有属性,就好像应用刚刚重建并重新启动一样。
【问题讨论】:
-
您可以通过反射更改它或回收该过程。 Here is a thread关于如何进行反思:
-
附注:您知道所有设置(例如来自 web.config)都被缓存了吗?
-
是否可以重新启动 IIS? Start or Stop an Application Pool (IIS 7)
-
最好的办法是反射或反弹 IIS AppDomain 来装箱静态数据。下面详细介绍这两者。当你的老板回来时,获得批准以制定适当的解决方案并摆脱
static readonly成员。小心,我已经看到并且仍然看到很多比我的编程生涯更早的“临时黑客”。 -
真的,任何建议都会比让它们可写更难看,我知道你说这“不是(当前)有效的选项”,但它会是最干净的......跨度>