您可以使用自 2.0 起在 C#/SQL 2005 中可用的SqlDependency 类在您的静态类中接收有关您正在缓存的数据在 SQL 中更新时发生更改的通知。
然后在您的代码中,您不必在类之间创建任何类型的依赖项来通知彼此更改。
请注意,通知会对性能产生影响,但如果如您所说,此数据不会经常更改,那么您应该没问题。此外,有资格获得通知的 SELECT 语句有某些限制。这一切都在该链接中列出。
在我当前的一个项目中,我有一个类似的类用于配置,我选择不使用依赖项,而是使用类似于您尝试做的失效方法。模式如下:
private static ReaderWriterLock lockObject = new ReaderWriterLock();
public static void Invalidate()
{
try
{
lockObject.AcquireWriterLock(LockTimeoutMilliseconds);
try
{
// Invalidate your content and reload here
}
finally
{
lockObject.ReleaseLock();
}
}
catch (ApplicationException ex)
{
// The reader lock request timed out. Log this.
}
}