正如我在您的 github 问题中所述,静态方法缓存是在 1.3.1 中添加的。
由于 MethodCache.Fody 的设计,您还必须向您的类添加一个 Cache Getter,其中包含应该缓存的方法并实现一个 Cache。您可以编写自己的缓存或使用现有缓存解决方案的适配器(请参阅https://github.com/Dresel/MethodCache的文档)。
您的示例的最少代码(具有基本的字典缓存实现)如下所示:
namespace ConsoleApplication
{
using System;
using System.Collections.Generic;
using System.Threading;
using MethodCache.Attributes;
public class Program
{
private static DictionaryCache Cache { get; set; }
[Cache]
private static int Calc(int b)
{
Thread.Sleep(5000);
return b + 5;
}
private static void Main(string[] args)
{
Cache = new DictionaryCache();
Console.WriteLine("Begin calc 1...");
var v = Calc(5);
// Will return the cached value
Console.WriteLine("Begin calc 2...");
v = Calc(5);
Console.WriteLine("end calc 2...");
}
}
public class DictionaryCache
{
public DictionaryCache()
{
Storage = new Dictionary<string, object>();
}
private Dictionary<string, object> Storage { get; set; }
// Note: The methods Contains, Retrieve, Store must exactly look like the following:
public bool Contains(string key)
{
return Storage.ContainsKey(key);
}
public T Retrieve<T>(string key)
{
return (T)Storage[key];
}
public void Store(string key, object data)
{
Storage[key] = data;
}
}
}
然而,更复杂的解决方案将使用服务类,具有 ICache 接口 Getter 和缓存的构造函数注入。ICache 可以包装任何现有的缓存解决方案。