我在我正在处理的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");
}
Run Code Online (Sandbox Code Playgroud)
现在,例如,通过我写的页面,我们将setting2的值更改为"Happy Variable"; 它保存到数据库就好了,但现在我需要它作为新值反映在Web应用程序中.由于它是静态类的静态只读属性,因此只有在应用程序首次连接并且无法手动设置时才会调用它.
重申一下,我不拥有原始类,因此"只使属性可写"不是(当前)有效选项.通常我会和我的老板谈谈这件事,他会做出一个判断电话,并且可能允许我修改另一个班级,但是我无法接听电话,他本周不在办公室.
所以基本上; 一旦Web应用程序开始运行,有没有办法重新初始化静态类?我只需要重新加载它的所有属性,就像应用程序刚刚重建并重新启动一样.
Nes*_*zon 15
ConstructorInfo constructor = typeof(Settings).GetConstructor(BindingFlags.Static | BindingFlags.NonPublic,null, new Type[0], null);
constructor.Invoke(null, null);
Run Code Online (Sandbox Code Playgroud)
您可以使用反射:
var prop = typeof(Settings).GetField("setting1", BindingFlags.Static |
BindingFlags.Public);
prop.SetValue(null, "Bar");
string currentValue = Settings.setting1; //Bar
Run Code Online (Sandbox Code Playgroud)
如果上面的代码代表了您所处的情况,那么您将无法重新初始化代码,除非您使用反射做了一些特别黑客的事情(顺便说一下,不建议这样做)。
编辑:哦等等 - 我没有意识到这是一个网络应用程序。您可以通过编程方式退回应用程序:
System.Web.HttpRuntime.UnloadAppDomain
Run Code Online (Sandbox Code Playgroud)