0

任何人都可以提供一个工作示例,说明使用 Castle Windsor 进行缓存是如何工作的。

我假设作为起点,我定义了CacheAspect从 IInterceptor 继承的 my ,如下所示:

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()
    {
    }

.. 当然,在 Windsor 容器中注册整个内容。

然而...

  1. 如何在每次方法调用时改变我想要缓存中的某些内容的时间量?在此示例中,我可能希望将其缓存 60 分钟。对于一天等其他示例,我是否必须CacheAspect为每个缓存持续时间创建一个?

  2. 从每种方法中识别每个缓存值的最佳方法是什么?例如使用invocation.TargetType.Name和的组合invocation.Method.Name

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

谢谢。

4

1 回答 1

0

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

简短回答您的问题

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

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

于 2012-05-07T23:06:15.003 回答