Если все ваши DataProvider'ы следуют схожему синтаксису, это должно быть довольно легко с обобщениями:
public List<T> GetData<T>(string cacheKey, Func<List<T>> retrieveDataFromApi)
{
return memoryCache.GetOrCreate(cacheKey, cacheEntry =>
{
cacheEntry.AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(1);
return retrieveDataFromApi();
});
}
Вы бы назвали это, используя что-то вроде:
GenericDataProvider.GetData("performance_status", FooApi.Instance.GetPerformanceStatuses);
Небольшие детали: вы вызываете API и не используете async/await
(вам, безусловно, следует) и FooApi.Instance
- это запах кода, вы на 50% используете Injection Dependency и 50% зависимостей жесткого кодирования.