ResourceProviderFactory периодическое обновление - PullRequest
3 голосов
/ 04 февраля 2009

Я создал пользовательский поставщик ресурсов, который возвращает строки из нашей базы данных, чтобы использовать их для чего угодно.

Проблема в том, что я не нашел способа «разорвать» кэш этих элементов и перезагрузить их из базы данных. В идеале я делал бы это каждые 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 метод или что-то, что даст мне все эти объекты простым способом, прежде чем я начну создавать весь этот код?

1 Ответ

1 голос
/ 08 октября 2009

Если вы можете использовать систему кэширования 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. то есть. просто проверьте в GetObject, если срок действия кэша истек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...