向postsharp [Cache] CacheKey添加参数

时间:2013-11-21 19:02:28

标签: c# postsharp

我有一个没有参数的简单方法:

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

我想将此方法用于不同的“id”。 “id”不是此方法的参数。 有没有机会使用我的id参数调用OnInvoke()来计算正确的CacheKey ??

thx4help

1 个答案:

答案 0 :(得分:1)

我们了解到您的Cache属性为MethodInterceptionAspect。在拦截期间,您的方面的OnInvoke代码实际上先执行,然后它可以继续执行您的原始方法。您所询问的内容似乎正好相反 - 从原始OnInvoke方法调用Get。这当然是不可能的。

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

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

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