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()
{
}
.. 当然,还要在温莎容器中注册整个东西。
然而。。。
如何改变每个方法调用在缓存中需要某些内容的时间量?在这个例子中,我可能希望它缓存 60 分钟。对于一天等的其他例子。是否必须为每个缓存持续时间创建一个
CacheAspect
?从每种方法中识别每个缓存值的最佳方法是什么?例如,结合使用
invocation.TargetType.Name
和invocation.Method.Name
?扩展问题 2 - 如果有传入的参数怎么办?然后,我需要确定我是否缓存了与一组特定参数匹配的数据。
谢谢。
我前段时间构建了 mbcache,http://code.google.com/p/mbcache,以启用使用动态代理的缓存。它在内部处理您的问题。在源代码中,有使用Castle Windsor(和LinFu)的实现。看看它(或者如果它适合您的需求,直接使用该框架)。
简短回答您的问题
-
AFAIK - 温莎(或其他代理固件)对此没有任何内置支持。你需要使用一些缓存框架(或者自己构建一些缓存逻辑,即使用弱引用)。
-
和 3.大多数缓存键都是基于字符串构建的。如果是这样 - 您需要以某种方式将类型、方法和参数转换为字符串。