我有一个没有参数的简单方法:
[Cache]
private void Get()
{
int id = 5;
var c = GetCustomerService(id);
}
我想将此方法用于不同的“id”。 “id”不是此方法的参数。 有没有机会使用我的id参数调用OnInvoke()来计算正确的CacheKey ??
thx4help
答案 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);
}