3
我想使用Microsoft.Extensions.Caching.Memory.MemoryCache在.NET核2.0控制台应用程序(实际上,在其或者在控制台或在asp.net应用程序中使用的库)如何在C#Core Console应用程序中使用MemoryCache?
我创建了一个测试应用程序:
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!");
}
}
}
不幸的是,这是行不通的。这些项目不会添加到缓存中,并且无法检索。
我怀疑我需要使用DependencyInjection,做这样的事情:
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!");
}
}
}
不幸的是,这也没有工作,我怀疑我不应该创建一个新的内存缓存,但是从服务中获得它提供者,但一直没能做到这一点。
任何想法?
@remcolam我会建议在这里检查文档,以确保你使用了正确的https://docs.microsoft.com/en-us/aspnet /核心/性能/缓存/内存#using-imemorycache – Nkosi
啊,我缺少的组件是这样的:当由CreateEntry返回的条目需要处置。在配置时,它被添加到缓存中: using(var entry = cache.CreateEntry(“item2”)) { entry.Value = 2; entry.AbsoluteExpiration = DateTime.UtcNow.AddDays(1); } – remcolam
PS:不需要使用依赖注入,唯一需要的是处理CreateEntry()的返回值 – remcolam