2012-04-14 86 views
0

任何人都可以提供一个如何与温莎城堡缓存工作的例子。与温莎城堡AOP缓存

我相信作为一个起点,我定义我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() 
    { 
    } 

..和当然在Windsor容器中注册整个东西。

但是......

  1. 我如何可以改变的时间我想在每个方法调用我的缓存东西的多少?在这个例子中,我可能希望它被缓存60分钟。对于其他例子一天等等等。我必须为每个缓存持续时间创建CacheAspect吗?

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

  3. 在问题2上展开 - 如果传入了参数会怎么样?然后,我需要确定是否已缓存匹配特定参数集的数据。

谢谢。

回答

0

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

简短回答您的问题

  1. AFAIK - 温莎(或其他代理FW)不具有任何内置该支持。你需要使用一些缓存框架(或者自己构建一些缓存逻辑,例如使用弱引用)。

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