データベースから文字列を返し、何にでも使用できるカスタム リソース プロバイダーを作成しました。
問題は、これらのアイテムのキャッシュを「破棄」してデータベースから再ロードする方法が見つからないことです。理想的には、これを 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 メソッドまたはこれらすべてのオブジェクトを簡単な方法で提供するものはありますか?