Wie bringe ich Daten in eine MemoryCache auf startup?
Beim Start, ich will ein Geschäft mit statischen Daten für meine web-app. So dass ich schließlich stolperte auf Microsoft.Extensions.- Caching.Speicher.MemoryCache. Nach dem Aufbau der Funktion, die verwendet das MemoryCache ich plötzlich finden die Daten, die ich gespeichert ist, nicht verfügbar. Sie sind also wohl zwei verschiedene Instanzen.
Wie erhalte ich Zugang zu den MemoryCache-Instanz starten, die verwendet werden, wird für den rest meines web-app? Dies ist, wie ich bin derzeit versucht es:
public class Startup
{
public Startup(IHostingEnvironment env)
{
//Startup stuff
}
public void ConfigureServices(IServiceCollection services)
{
//configure other services
services.AddMemoryCache();
var cache = new MemoryCache(new MemoryCacheOptions());
var entryOptions = new MemoryCacheEntryOptions().SetPriority(CacheItemPriority.NeverRemove);
//Some examples of me putting data in the cache
cache.Set("entryA", "data1", entryOptions);
cache.Set("entryB", data2, entryOptions);
cache.Set("entryC", data3.Keys.ToList(), entryOptions);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
//pipeline configuration
}
}
Und der Controller, wo ich den MemoryCache
public class ExampleController : Controller
{
private readonly IMemoryCache _cache;
public ExampleController(IMemoryCache cache)
{
_cache = cache;
}
[HttpGet]
public IActionResult Index()
{
//At this point, I have a different MemoryCache instance.
ViewData["CachedData"] = _cache.Get("entryA");
return View();
}
}
Wenn dies nicht möglich ist, gibt es vielleicht eine bessere/einfachere alternative? Würde eine Globale Singleton-Arbeit in dieser situation?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie die Anweisung
waren Sie in der Tat sagen, dass Sie wollte, einen cache-Speicher singleton, die entschlossen überall dort, wo Sie injiziert IMemoryCache wie Sie es in Ihrer Steuerung. Also statt der Schaffung eines neuen cache-Speicher, müssen Sie die Werte hinzufügen, um das singleton-Objekt erstellt wurde. Sie können dies tun, indem Sie Ihre Methode Konfigurieren, um so etwas wie:
Verwenden
Configure
Methode, nichtConfigureServices
: