アプリケーション全体で使用できる汎用の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;
}
しかし、私には2つの問題があります。
キャッシュにデータを入力するために渡したい関数のほとんどには、必要なパラメーターがあります。上記の例のように、これは2つのintパラメーターを使用するメソッドです。最初の質問は、このキャッシュハンドラーでは認識されないため、関数を呼び出すパラメーターをどのように渡すことができるかということです。これは、この外部で認識されます。また、これは次の質問2に関連しており、関数が必要とするパラメーターの数に関係なく、アプローチでこれをどのように機能させることができますか(存在する場合)
2番目の問題は、キャッシュアイテムを設定するために渡す必要のある関数の多くが変化することです。つまり、パラメーターがないもの、パラメーターが1つあるもの、複数あるもの、それぞれのタイプがあります。これらのパラメータのうち、変化する可能性があります。それで、私が使用した関数のすべての可能な組み合わせをカバーするすべての可能な署名で関数を定義する必要なしに、これをどのように機能させることができるでしょうか。