AOP 缓存与温莎城堡

本文关键字:城堡 缓存 AOP | 更新日期: 2023-09-27 18:31:12

谁能提供一个工作示例来说明使用温莎城堡缓存将如何工作。

我认为作为起点,我将继承自IInterceptor的CacheAspect定义如下:

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.Nameinvocation.Method.Name

  3. 扩展问题 2 - 如果有传入的参数怎么办?然后,我需要确定我是否缓存了与一组特定参数匹配的数据。

谢谢。

AOP 缓存与温莎城堡

我前段时间构建了 mbcache,http://code.google.com/p/mbcache,以启用使用动态代理的缓存。它在内部处理您的问题。在源代码中,有使用Castle Windsor(和LinFu)的实现。看看它(或者如果它适合您的需求,直接使用该框架)。

简短回答您的问题

  1. AFAIK - 温莎(或其他代理固件)对此没有任何内置支持。你需要使用一些缓存框架(或者自己构建一些缓存逻辑,即使用弱引用)。

  2. 和 3.大多数缓存键都是基于字符串构建的。如果是这样 - 您需要以某种方式将类型、方法和参数转换为字符串。