2012-04-14 2 views
0

Может ли кто-нибудь представить рабочий пример того, как будет работать кеширование с помощью Castle Windsor.AOP Caching with Castle Windsor

Я полагаю, в качестве отправной точки я определяю мой CacheAspect, который наследуется от IInterceptor следующим образом:

public class CacheAspect : IInterceptor 
{ 
    public void Intercept(IInvocation invocation) 
    { 
     // Code here to check if data is in cache and if so 
     // put that into invocation.ReturnValue... job done! 

     // If not then invoke the method 
     invocation.Proceed(); 

     // Now cache the result of the invocation 
    } 
} 

Затем я могу украсить любой метод с моим CacheAspect ...

[Interceptor(typeof(CacheAspect))] 
    public List<string> GetStaticData() 
    { 
    } 

.. и конечно, зарегистрируйте все это в контейнере Виндзора.

Однако ...

  1. Как я могу изменить количество времени, я хочу что-то в моем кэше на вызов метода? В этом примере я могу потребовать его кэширования в течение 60 минут. Для других примеров за день и т. Д. Должен ли я создавать CacheAspect для каждой продолжительности кеша?

  2. Каков наилучший способ определить каждое кешированное значение для каждого метода? Например, комбинация invocation.TargetType.Name и invocation.Method.Name?

  3. Развернувшись на вопросе 2 - что делать, если есть параметры? Затем мне нужно определить, есть ли у меня кэшированные данные, соответствующие определенному набору параметров.

Спасибо.

ответ

0

Я построил mbcache, http://code.google.com/p/mbcache, некоторое время назад, чтобы включить кеширование с использованием динамических прокси. Он обрабатывает ваши вопросы внутренне. В исходном коде есть реализации с использованием Castle Windsor (и LinFu). Взгляните на него (или используйте фреймворк напрямую, если он вам подходит).

Короткие ответы на вопросы

  1. AFAIK - Виндзор (или другой прокси-ФВ) не имеет встроенной поддержки для этого. Вам нужно использовать некоторую структуру кэша (или самостоятельно создать собственную логику кэша, т. Е. Использовать слабые ссылки).

  2. и 3. Большинство ключей кеша построены на строках. Если это так - вам нужно каким-то образом преобразовать тип, метод и параметры в строку.

Смежные вопросы