在我的 mvc 网站中,我曾经使用静态变量来存储请求之间的共享变量,有没有办法在不重新启动我的所有应用程序的情况下“使”一组静态变量“无效”,或者在它们的 getter 中使它们无效。
public static object IdsFromSomethingLocker = new object();
public static int[] IdsFromSomething
{
get
{
if (_idsFromSomething == null)
{
lock (IdsFromSomethingLocker)
{
if (_idsFromSomething == null)
{
_idsFromSomething = // some long loading treatment
}
}
}
return _idsFromSomething;
}
}
一种解决方案可能是添加一个断言以知道何时使此变量无效,例如:
public static object IdsFromSomethingLocker = new object();
public static int[] IdsFromSomething
{
get
{
if (_idsFromSomething == null || needToBeInvalidate)
{
lock (IdsFromSomethingLocker)
{
if (_idsFromSomething == null)
{
_idsFromSomething = // some long loading treatment
}
}
}
return _idsFromSomething;
}
}
但我不想为每个类似的处理添加一个布尔值。
有没有办法在我的“缓存”属性上方添加自定义属性以了解何时需要使它们无效?
编辑 :例如,长时间处理可能是“加载一个 xml 文件并解析它”,但是当我的文件被修改时,我想使我的静态属性无效,我不想使用 HttpCache(因为我想要一个可以使用的解决方案在另一个上下文中(winForm)。并且 xml 案例可以是另一个数据源在我的案例中,我从 RavenDB 检索数据。
原始数据由另一个程序更新。