0

我正在为我的应用程序开发一个简单的缓存类。

using System;
namespace Program {
  public class Cache {
    public delegate int CacheMethodInt();
    public static int Get(CacheMethodInt method) {
      //todo: generate cachekey here
      return method.Invoke();
    }
  }

  public class Calculator {
    public int Add(int x, int y) {
      return x + y;
    }
  }

  class Program {
    static void Main(string[] args) {
      Calculator c = new Calculator();
      Console.WriteLine(Cache.Get(() => c.Add(1, 2)));
    }
  }
}

Cache:Get我需要检查返回值是否已被缓存,如果是,则在不调用该方法的情况下返回它。问题是我不知道如何生成一个好的缓存键。在这种情况下,我想要这样的东西:

Calculator:Add:1(int):2(int)

是否可以获取此信息Cache:Get?我正在使用.NET 2.0。

4

1 回答 1

1

可以使用反射。

作为替代方案,在一个项目中,我出于同样的目的使用了 Postsharp。由于受益更通用和通用的方法

并且不要忘记缓存失效或过期。

相关问题显示了如何获取 MethodInfo 和方法名称:

在匿名方法中使用 MethodInfo.GetCurrentMethod()

当您拥有 MethodInfo 时,您可以获得所需的一切

于 2012-07-19T16:53:28.600 回答