2013-11-21 38 views
1

我有简单的方法,不带参数:添加参数postsharp [缓存] CacheKey

[Cache] 
private void Get() 
{ 
    int id = 5; 
    var c = GetCustomerService(id); 
} 

我想缓存此方法针对不同的“ID” S。 “id”不是这个方法的参数。 有没有机会使用我的ID参数来调用OnInvoke()来计算正确的CacheKey?

thx4help

回答

1

我明白你的Cache属性是MethodInterceptionAspect。在截取期间,您的方面的OnInvoke代码实际上是先执行,然后它可以继续执行原始方法。看来你问的是相反的 - 从原来的Get方法调用OnInvoke。这当然是不可能的。

您可以通过创建一个包含所有定义缓存键的参数的新方法来执行一些重构。然后在您的OnInvoke方法中,您可以使用MethodInterceptionArgs.Arguments构建缓存密钥。

private T Get() 
{ 
    int id = 5; 
    return GetInternal(id); 
} 

[Cache] 
private T GetInternal(int id) 
{ 
    return GetCustomerService(id); 
} 
+0

感谢您的回复和解释:)我会这样做,你说的方式:)祝你有美好的一天! – user3018809