würde Ich mag die Microsoft.Extensions.Caching.Memory.MemoryCache in einer .NET-Core 2.0 Konsolenanwendung verwenden (Eigentlich in einer Bibliothek, die entweder in einer Konsole oder in einer asp.net app verwendet wird)Wie wird MemoryCache in der C# Core Console App verwendet?
Ich habe eine Test App erstellt:
using System;
namespace ConsoleTest
{
class Program
{
static void Main(string[] args)
{
var cache = new Microsoft.Extensions.Caching.Memory.MemoryCache(new Microsoft.Extensions.Caching.Memory.MemoryCacheOptions());
int count = cache.Count;
cache.CreateEntry("item1").Value = 1;
int count2 = cache.Count;
cache.TryGetValue("item1", out object item1);
int count3 = cache.Count;
cache.TryGetValue("item2", out object item2);
int count4 = cache.Count;
Console.WriteLine("Hello World!");
}
}
}
Leider funktioniert das nicht. Die Elemente werden dem Cache nicht hinzugefügt und sie können nicht abgerufen werden.
Ich vermute, ich brauche Dependency Injection zu verwenden, so etwas wie dies zu tun:
using System;
using Microsoft.Extensions.DependencyInjection;
namespace ConsoleTest
{
class Program
{
static void Main(string[] args)
{
var provider = new Microsoft.Extensions.DependencyInjection.ServiceCollection()
.AddMemoryCache()
.BuildServiceProvider();
//And now?
var cache = new Microsoft.Extensions.Caching.Memory.MemoryCache(new Microsoft.Extensions.Caching.Memory.MemoryCacheOptions());
var xxx = PSP.Helpers.DependencyInjection.ServiceProvider;
int count = cache.Count;
cache.CreateEntry("item1").Value = 1;
int count2 = cache.Count;
cache.TryGetValue("item1", out object item1);
int count3 = cache.Count;
cache.TryGetValue("item2", out object item2);
int count4 = cache.Count;
Console.WriteLine("Hello World!");
}
}
}
Leider ist dies auch nicht funktioniert, ich vermute, ich sollte nicht einen neuen Speicher-Cache erstellen, aber es aus dem Dienst bekommen Anbieter, aber das war nicht möglich.
Irgendwelche Ideen?
@remcolam ich Dokumentation vorschlagen würde Überprüfung hier, um sicherzustellen, Sie verwenden es richtig https://docs.microsoft.com/en-us/aspnet/core/performance/caching/speicher # using-imemorycache – Nkosi
Ah, die Komponente, die ich vermisste, ist dies: Wenn der von CreateEntry zurückgegebene Eintrag entsorgt werden muss. Bei der Entsorgung wird es dem Cache hinzugefügt: mit (var entry = cache.CreateEntry ("item2")) { entry.Value = 2; entry.AbsoluteExpiration = DateTime.UtcNow.AddDays (1); } – remcolam
PS: Es ist nicht erforderlich, Abhängigkeitsinjektion zu verwenden, das einzige, was benötigt wurde, entsorgte den Rückgabewert von CreateEntry() – remcolam