我正在尝试创建一个通用的 CacheManager ,我可以在我的整个应用程序中使用它,这将确保缓存项的所有管理都以一致的方式完成并遵守一些缓存访问模式。这将用于根据需要缓存所有类型的对象。
我知道我可以使用委托将函数传递给方法,您可以在下面看到。
public static T GetGlobalCacheitem( Func<int ,int , T> populateCacheCall )
{
string cacheKey = "test";
var cachedObject = CacheFactory<T>.GlobalCache.GetGlobalCacheItem(cacheKey);
if (cachedObject == null)
{
cachedObject = populateCacheCall();
CacheFactory<T>.GlobalCache.AddGlobalCacheItem(cachedObject, cacheKey);
}
return cachedObject;
}
但是我有两个问题。
我想传入以填充缓存的大多数函数本身都具有他们需要的参数。在上面的例子中,这是一个需要两个 int 参数的方法。第一个问题是我怎样才能传入我希望调用函数的参数,因为它们在这个缓存处理程序中是不知道的,在这个缓存处理程序之外是知道的。也这与下一个问题二有关,无论函数需要多少参数(如果有的话),我如何才能在一种方法中做到这一点?
第二个问题是我需要传入的很多用于填充缓存项的函数会有所不同,有些没有参数,有些只有一个,有些可能不止一个,而且每个函数的类型都不同。这些参数中的一些会有所不同。那么我如何能够使其工作而不必定义一个具有所有可能签名的函数,该函数将涵盖支付给我使用的所有可能的函数组合。