gpt4 book ai didi

c# - ResourceProviderFactory 周期刷新

转载 作者:行者123 更新时间:2023-11-30 18:11:01 24 4
gpt4 key购买 nike

我创建了一个自定义资源提供程序,它从我们的数据库返回字符串以用于任何用途。

问题是我还没有找到一种方法来“破坏”这些项目的缓存并从数据库中重新加载它们。理想情况下,我会每隔 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 方法或其他方法可以轻松地为我提供所有这些对象?

最佳答案

如果可以使用ASP.Net缓存系统就用它吧。您可以使用 HttpRuntime.Cache 访问它并添加定时失效检查下面的示例:

var Key = "Resources:" + ResourceType + ResourceKey + Cutlure.Name;
HttpRuntime.Cache.Insert(Key, ValueToCache,
null, DateTime.Now.AddMinutes(1d),
System.Web.Caching.Cache.NoSlidingExpiration);

如果不能使用ASP.Net缓存系统

您可以将触发缓存失效的逻辑放在 IResourceProvider 中。IE。如果缓存过期,只需检查 GetObject。

关于c# - ResourceProviderFactory 周期刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/510396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com