我创建了一个自定义资源提供程序,它从我们的数据库返回字符串以用于任何用途。
问题是我还没有找到一种方法来“破坏”这些项目上的缓存并从数据库中重新加载它们。理想情况下,当我们更新缓存并想要重新加载它时,我会每 x 分钟或手动执行此操作。
从技术上讲,这很容易。我将所有内容都存储在哈希表中,所以只需核对它并在需要时重新加载。但是,由于 ResourceProviderFactory 处理每个资源类的加载,我不确定如何枚举它创建的类。
代码概览:
public class ResourceProvider : IResourceProvider
{
private Dictionary<string, Dictionary<string, object>> _resourceCache
= new Dictionary<string, Dictionary<string, object>>();
private string _virtualPath;
private string _className;
public ResourceProvider(string virtualPath, string className)
{
_virtualPath = virtualPath;
_className = className;
}
public object GetObject(string resourceKey, CultureInfo culture)
{
...
}
}
public class ResourceProviderFactory :System.Web.Compilation.ResourceProviderFactory
{
public override IResourceProvider CreateGlobalResourceProvider(string classKey)
{
return new Cannla.Business.Resource.ResourceProvider(string.Empty, classKey);
}
...
...
}
我打算做的是每次调用 CreateGlobalResourceProvider 时添加一个引用(例如,将新对象添加到一个集合中,然后枚举它并在需要时删除该对象内的所有内容)但我不确定这是否会做ResourceProviderFactory 有点奇怪。
在我构建所有这些代码之前,是否有任何 ResourceProviderFactory IEnumerable 方法或可以以简单的方式为我提供所有这些对象的方法?