Я пытаюсь реализовать FileCache (https://github.com/acarteas/FileCache), который основан на ObjectCache.
Я пытаюсь проверить объект кэша на наличие или добавить его, если требуется, и вернуть. Однако, когда объект не существует, делегат не выполняется и выдается ошибка: Тип 'myNamespace.Controllers.ListController + <> c__DisplayClass0_0' в [...] не помечен как сериализуемый.
Что я пробовал (упрощенно):
private string generateString(int? Id)
{
return "String";
}
public ActionResult GetSomething(int? Id)
{
var cacheFilePath = $"{AppDomain.CurrentDomain.BaseDirectory}{"\\cache"}";
var cache = new FileCache(cacheFilePath, false, TimeSpan.FromSeconds(30));
if (purgeCache)
cache.Remove($"CacheKey{Id}");
Func<string> createString = () => generateString(Id);
var myString = (string) cache.AddOrGetExisting($"CacheKey{Id}", createString, new CacheItemPolicy() { AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(30) });
return new JsonStringResult(myString);
}
Хорошо, теперь я попытался указать делегат createString с Serializable, но это не работает.
Может ли кто-нибудь указать мне правильное направление?
По сути, я хочу:
- запустить оператор, который возвращает предыдущий вывод generateString (123); если он не существует или срок его действия истек, он должен сгенерировать его заново.
Спасибо за любые советы!