Gibt es eine effizientere Möglichkeit zu überprüfen, ob zwischengespeicherte Daten existieren, ob sie es erhält und ob sie die api/database nicht aufruft und dann zwischenspeichert? Es scheint wirklich ineffizient für mich, Code wie diesen immer wieder zu machen.Generisches Caching in C#
List<Map> maps = new List<Map>();
List<Playlist> playlists = new List<Playlist>();
if (SingletonCacheManager.Instance.Get<List<Map>>("Maps") != null)
{
maps = SingletonCacheManager.Instance.Get<ListMap>>("Maps");
}
else
{
maps = _mapRepository.FindBy(x => x.Active).ToList();
SingletonCacheManager.Instance.Add<List<Map>>(maps, "Maps", 20);
}
if (SingletonCacheManager.Instance.Get<List<Playlist>>("Playlists") != null)
{
playlists = SingletonCacheManager.Instance.Get<List<Playlist>>("Playlists");
}
else
{
var p = await _apiService.GetPlaylists();
playlists = p.ToList();
SingletonCacheManager.Instance.Add<List<Playlist>>(playlists, "Playlists", 20);
}
ist so etwas wie diese möglich:
List<Map> maps = this.CacheHelper.GetCachedItems<Map>(key, lengthoftime);
und dann das GetCachedItems würde die Prüfung für die zwischengespeicherten Elemente tun und entsprechend abgerufen werden. Dies scheint möglich, aber es ist, wenn die zwischengespeicherten Elemente nicht vorhanden sind und ich die Elemente aus der API/Datenbank abrufen muss, die ich nicht weiß, ob es möglich ist, generisch zu machen.
Die einzige Lösung ist eine switch-Anweisung des übergebenen Typs?
switch(<T>type)
{
case<Map>:
return _mapRepository.FindBy(x => x.Active);
case<Playlist>:
return await _apiService.GetPlaylists();
}
Danke für jede Hilfe.
Ich mache etwas wie folgt: https://github.com/WiredUK/Wired.Caching/blob/master/Wired.Caching/InMemoryCache.cs#L52. Im Wesentlichen übergebe ich die Funktion, um die Daten (von der Datenbank, API oder was auch immer) in die Cache-Funktion zu bekommen und die nur bei Bedarf aufgerufen wird. – DavidG