Реализация кэша правильно в библиотеке классов для использования в приложении asp.net

Вы должны использовать себя. префикс, если вы вызываете метод, который является частью класса. Если вместо этого вы хотите вызывать main () глобально и размещать его вне класса, вы не должны определять функции main () и gen () в классе, который он сам. поэтому, когда вы вызываете gen () и gen () не является глобальной функцией, но это функция, которая находится в классе, вы должны ввести

generate = self.gen(size)

Помните, что отступы в python - это способ иметь блоки. Так что, если вы сделаете отступ main, main будет в блоке класса, и он не будет доступен глобально.

8
задан Per Hornshøj-Schierbeck 1 October 2008 в 06:38
поделиться

2 ответа

По-моему, лучшее решение имело бы следующие характеристики:

  • Использует доступные услуги кэширования, предоставленные старающимся избегать платформы, пишущий Ваше собственное.

  • Не связывает Вашу библиотеку классов с Системой. Сеть, чтобы иметь когерентные слои.

  • Но если библиотека классов работает в приложении ASP.NET, решение не должно требовать для навлечения другой реализации кэширования (например, Блок Программы кэширования Библиотеки Предприятия), который требует дополнительной конфигурации и установки.

Так, я использовал бы стратегию МОК, чтобы позволить библиотеке классов использовать различные реализации кэширования, на основе среды, на которой она работает.

Предположим, что Вы определяете свой абстрактный контракт на кэширование как:

public interface ICacheService 
{
    AddItem(...);
}

Вы могли обеспечить реализацию на основе Системы. Сеть:

public AspNetBasedCacheService : ICacheService
{
    AddItem(...)
    {
        // Implementation that uses the HttpContext.Cache object
    }
 }

И затем 'опубликуйте' ту реализацию как одиночный элемент. Обратите внимание, что различие с Вашим исходным подходом - то, что одиночный элемент является просто ссылкой на кэш ASP.NET основанная на сервисе реализация вместо полного 'объекта кэша'.

public class ChacheServiceProvider 
{
    public static IChacheService Instance {get; set;}

}

Необходимо было бы инициализировать chaching реализацию или путем выполнения ленивой инициализации, или при запуске приложения (в global.asax.cs)

И каждый доменный компонент смог бы использовать опубликованный сервис кэширования, не зная, что он реализован на основе Системы. Сеть.

// inside your class library:
IChacheService chache = CacheServiceProvider.Instance;
cache.AddItem(...);

Я соглашаюсь, что это - вероятно, не простое решение, но я стремлюсь к использованию в своих интересах реализации кэша ASP.NET, не жертвуя отделением кода и гибкостью.

Я надеюсь, что понял Ваше право вопроса.

9
ответ дан 5 December 2019 в 17:43
поделиться

Данные не собрать "мусор", пока кэш все еще содержит ссылку на них.

Кроме того, никогда не используйте Одиночные элементы.

1
ответ дан 5 December 2019 в 17:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: