我有一个静态列表类,它公开了几个主要是静态数据的列表。
但是,可以不时在应用程序内修改该数据。
我想要的是让我的静态类根据将保存任何更改的代码引发的事件重新加载数据。
所以我想我需要有一个事件和一个代表,但是我在想象事件和代表的去向以及谁引发事件以及如何等方面遇到了一些麻烦。
在这一点上,我所拥有的只是一个静态类,它在它的构造函数中加载数据和一个在其他地方更新数据的类。
编辑
我应该简单地调用静态类中的另一个方法来重新加载数据而不是担心引发事件吗?我的意思是,我是否过度复杂化了代码?
您可以使用自 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.
}
}