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?

Schreibe einen Kommentar