【问题标题】:AOP Caching with Castle Windsor使用 Castle Windsor 进行 AOP 缓存
【发布时间】:2012-04-26 16:28:58
【问题描述】:

谁能提供一个工作示例,说明使用 Castle Windsor 进行缓存是如何工作的。

我假设作为起点,我定义了继承自 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()
    {
    }

.. 当然也可以在 Windsor 容器中注册整个内容。

不过……

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

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

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

谢谢。

【问题讨论】:

    标签: c# .net caching castle-windsor aop


    【解决方案1】:

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

    简短回答您的问题

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多