0

在我的 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 检索数据。

原始数据由另一个程序更新。

4

0 回答 0